How to get list of all tables that has identity columns

前端 未结 5 785
小蘑菇
小蘑菇 2021-02-04 00:21

I would like to learn how to fetch list of all tables that has identity columns from a MS SQL database.

相关标签:
5条回答
  • 2021-02-04 00:25

    The script below will do:

    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 
    
    0 讨论(0)
  • 2021-02-04 00:26
    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]
    );
    
    0 讨论(0)
  • 2021-02-04 00:33

    Select OBJECT_NAME(object_Id) Rrom sys.identity_columns where is_identity = 1;

    0 讨论(0)
  • 2021-02-04 00:38
          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
    
    0 讨论(0)
  • 2021-02-04 00:48

    I like this approach because it uses a join instead of a WHERE EXISTS or a call to COLUMNPROPERTY. Note that the group by is only necessary if you a) have tables with more than one IDENTITY column and b) don't want duplicate results:

    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;
    
    0 讨论(0)
提交回复
热议问题