2013-04-16 12 views

答えて

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

の質問に答えながら、あまりにも説明のいくつかの種類を提供してください。.. – Lal

+0

あなたのコードの簡単な説明を追加してください。コードのみの回答は(時には)良いですが、コード+説明の回答は(常に)良いです。 – Barranka

4

それが存在するかCOLUMNPROPERTYへの呼び出しの代わりにWHEREの結合を使用していますので、私は、このアプローチが好きです。あなたがa)は、複数のIDENTITY列を持つテーブルを持っていると、b)重複した結果を望んでいない場合でグループにのみ必要であることに注意してください:

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

選択OBJECT_NAME(OBJECT_ID)RROM sys.identity_columns どこis_identity = 1;

以下のスクリプトが行います
0

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 
関連する問題