2013-04-16 10 views

Antwort

35
SELECT 
    [schema] = s.name, 
    [table] = t.name 
FROM sys.schemas AS s 
INNER JOIN sys.tables AS t 
    ON s.[schema_id] = t.[schema_id] 
WHERE EXISTS 
(
    SELECT 1 FROM sys.identity_columns 
    WHERE [object_id] = t.[object_id] 
); 
7
 select COLUMN_NAME, TABLE_NAME 
     from INFORMATION_SCHEMA.COLUMNS 
     where TABLE_SCHEMA = 'dbo' 
     and COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1 
     order by TABLE_NAME 
+2

Bitte geben Sie eine Art von Erklärungen zu, während Fragen zu beantworten .. – Lal

+0

Bitte fügen Sie eine kurze Erklärung des Codes. Code-only-Antworten sind (manchmal) gut, aber Code + Erklärungen sind (immer) besser. – Barranka

4

Ich mag diesen Ansatz, weil es eine Verknüpfung statt einer uses WHERE EXISTS oder ein Aufruf an COLUMN. Beachten Sie, dass die Gruppe nur erforderlich, wenn Sie a) haben Tabellen mit mehr als einer Identity-Spalte und b) nicht wollen, doppelte Ergebnisse:

SELECT 
    SchemaName = s.name, 
    TableName = t.name 
FROM 
    sys.schemas AS s 
    INNER JOIN sys.tables AS t ON s.schema_id = t.schema_id 
    INNER JOIN sys.columns AS c ON t.object_id = c.object_id 
    INNER JOIN sys.identity_columns AS ic on c.object_id = ic.object_id AND c.column_id = ic.column_id 
GROUP BY 
    s.name, 
    t.name 
ORDER BY 
    s.name, 
    t.name; 
-1

Select OBJECT_NAME (object_id) Rrom sys.identity_columns wo is_identity = 1;

0

Das Skript unten tun:

SELECT a.name as TableName, 
    CASE WHEN b.name IS NULL 
    THEN 'No Identity Column' 
    ELSE b.name 
    END as IdentityColumnName 
FROM sys.tables a 
    LEFT JOIN sys.identity_columns b on a.object_id = b.object_id