我需要從選定數據庫中的每個表中獲取主鍵(如果存在),標識(如果存在)以及名爲「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」命名列。因此,我需要列出有關每個表格的信息。 –
列總是被命名。 –