[英]Get Primary Key Column of a Table
我想确保这是获取给定表名称的pk名称,架构,表名称和列名称的正确方法
SELECT i.name AS IndexName,
(SELECT SCHEMA_NAME([schema_id]) FROM sys.[tables] WHERE [object_id] = ic.OBJECT_ID) SchemaName,
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
AND OBJECT_NAME(ic.OBJECT_ID) = 'MyTable'
我相信这是有效的
SELECT i.name AS IndexName,
SCHEMA_NAME([schema_id]) SchemaName,
OBJECT_NAME(ic.OBJECT_ID) AS TableName,
COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName,
ic.key_ordinal
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
INNER JOIN sys.[tables] st
ON st.[object_id] = ic.OBJECT_ID
WHERE i.is_primary_key = 1
AND SCHEMA_NAME([schema_id]) = 'auth'
AND OBJECT_NAME(ic.OBJECT_ID) = 'Profile'
有很多方法可以做到这一点,没有一个“正确的方法”。 这是可行的,但有些附带的盒子会让您不知所措。 一些小的调整:
SELECT
schema_name(t.schema_id) AS SchemaName
,t.name AS TableName
,i.name AS IndexName
,co.name AS ColumnName
,ic.key_ordinal AS ColumnOrder -- [2]
FROM sys.tables AS t
INNER JOIN sys.indexes AS i
ON i.OBJECT_ID = t.OBJECT_ID
INNER JOIN sys.index_columns AS ic
ON i.OBJECT_ID = ic.OBJECT_ID
AND i.index_id = ic.index_id
INNER JOIN sys.columns AS co
ON co.column_id = ic.index_column_id
AND co.object_id = t.object_id
WHERE i.is_primary_key = 1
AND t.name = 'MyTable'
AND schema_name(t.schema_id) = 'dbo' -- [1]
ORDER BY ic.key_ordinal -- [2]
[1]可让您指定要搜索的架构(仅在定义了多个dbo时才重要)
[2]涵盖复合(多列)索引,并显示其顺序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.