[英]How do I determine the column position in a compound key
I need to identify all the primary keys in a db. 我需要确定数据库中的所有主键。 The following code appears to do the job quite well:
以下代码似乎可以很好地完成此工作:
SELECT i.name AS IndexName,
OBJECT_NAME (ic.OBJECT_ID) AS TableName,
COL_NAME (ic.OBJECT_ID, ic.column_id) AS ColumnName
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
ON i.OBJECT_ID = ic.OBJECT_ID AND i.index_id = ic.index_id
WHERE i.is_primary_key = 1
The problem I have is that some of the keys are compound keys. 我的问题是某些键是复合键。 This query identifies which keys are compound (multiple rows for a particular indexName in the sys.indexes table) but it does not show me the order.
此查询标识哪些键是复合键(sys.indexes表中特定indexName的多行),但未显示顺序。 I need to know this because:
我需要知道这一点,因为:
PRIMARY KEY CLUSTERED
(
[bl_id] ASC,
[fl_id] ASC,
[rm_id] ASC
)
is not the same as: 与以下内容不同:
PRIMARY KEY CLUSTERED
(
[rm_id] ASC
[fl_id] ASC,
[bl_id] ASC,
) )
key_ordinal seems to do the trick: key_ordinal似乎可以解决问题:
SELECT i.name AS IndexName,
OBJECT_NAME (ic.OBJECT_ID) AS TableName,
COL_NAME (ic.OBJECT_ID, ic.column_id) AS ColumnName,
ic.Key_ordinal as ColumnOrder
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
ON i.OBJECT_ID = ic.OBJECT_ID AND i.index_id = ic.index_id
WHERE i.is_primary_key = 1
ORDER BY ic.OBJECT_ID, ic.Key_ordinal
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.