如何获取具有标识列的所有表的列表

All*_*hua 23 sql t-sql sql-server identity-column

我想学习如何从MS SQL数据库中获取具有标识列的所有表的列表.

Aar*_*and 45

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]
);
Run Code Online (Sandbox Code Playgroud)


小智 8

      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
Run Code Online (Sandbox Code Playgroud)

  • 在回答问题时也请提供一些解释. (2认同)

Eri*_*ham 5

我喜欢这种方法,因为它使用联接而不是WHERE EXISTS或对COLUMNPROPERTY的调用。请注意,只有在以下情况下,分组依据才是必需的: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;
Run Code Online (Sandbox Code Playgroud)