【问题标题】:How to get list of all tables that has identity columns如何获取具有标识列的所有表的列表
【发布时间】:2013-04-09 06:30:42
【问题描述】:

我想了解如何从 MS SQL 数据库中获取具有标识列的所有表的列表。

【问题讨论】:

    标签: sql sql-server tsql identity-column


    【解决方案1】:
    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]
    );
    

    【讨论】:

      【解决方案2】:
            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
      

      【讨论】:

      • 请添加您的代码的简要说明。仅代码的答案(有时)很好,但代码+解释的答案(总是)更好。
      【解决方案3】:

      我喜欢这种方法,因为它使用联接而不是 WHERE EXISTS 或对 COLUMNPROPERTY 的调用。请注意,仅当您 a) 具有包含多个 IDENTITY 列的表并且 b) 不希望重复结果时,才需要 group by:

      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;
      

      【讨论】:

        【解决方案4】:

        下面的脚本会做:

        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 
        

        【讨论】:

          【解决方案5】:

          选择 OBJECT_NAME(object_Id) Rrom sys.identity_columns 其中 is_identity = 1;

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-18
            相关资源
            最近更新 更多