我需要从选定数据库中的每个表中获取主键(如果存在),标识(如果存在)以及名为“ID”(如果存在)的列。我得到了SQL查询来完成这项工作,但查询返回记录,其中主键有时同时包含“否”和“是”值。因此,产生多行数据,所以我使用了DISTINCT这个词来删除重复数据。我假设这是由于某些列上定义的索引。从数据库表中检索主键,标识列和特定名称列
如何解决这个问题?使用
SQL查询:
SELECT DISTINCT
object_name(i.object_id) [Table],
c.name [Column],
IIF(i.is_primary_key = 1, 'Yes', 'No') [PK],
IIF(c.is_identity = 1, 'Yes', 'No') [Identity],
IIF(UPPER(c.name) = 'ID', 'Yes', 'No') [Named ID]
FROM sys.indexes i
INNER JOIN sys.columns c ON c.object_id = i.object_id
INNER JOIN sys.identity_columns idc ON idc.object_id = c.object_id AND idc.column_id = c.column_id
WHERE
i.is_primary_key = 1 OR c.is_identity = 1 OR c.name = 'ID'
ORDER BY [Table];
我不明白这里查询。您是否尝试使用主键,身份或命名ID的所有列?你想为复合键发生什么? –
我需要检查可能用作唯一标识符的列的所有表。列上的主键意味着将使用PK。如果未找到PK,将使用Identity(自动增量)行。最后,如果没有PK或自动增量(标识)列,那么将使用名为“ID”的列。所以PK> Identity>“ID”命名列。因此,我需要列出有关每个表格的信息。 –
列总是被命名。 –