2017-01-09 77 views
0

我正在嘗試編寫SQL查詢以獲取表的主鍵的完整規範。我可以編寫一個查詢來獲取涉及的列,但我無法查詢列的排序信息。例如表中定義爲:Sql Server - 通過SQL查詢獲取包括列排序順序的表的完整主鍵

CREATE TABLE [dbo].[MyPrimaryKeyTable]([MyKeyColumn] [int] NOT NULL, [SecondKeyColumn] [int] NOT NULL, [ThirdCol] [varchar](50) NOT NULL, [ForthCol] [varchar](10) NOT NULL) 
GO 

ALTER TABLE [dbo].[MyPrimaryKeyTable] ADD CONSTRAINT [PK_MyPrimaryKey] PRIMARY KEY CLUSTERED ([MyKeyColumn] ASC, [SecondKeyColumn] DESC, [ThirdCol] DESC) 
GO 

如果您使用查詢:

SELECT * 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE TABLE_NAME = 'MyPrimaryKeyTable' 

然後我返回一組結果顯示錶名和三列組成的主鍵(MyKeyColumn,SecondKeyColumn和ThirdCol),但沒有信息可以說MyKeyColumn是按升序排序的,而其他兩列是按鍵降序排序的。如何查詢主鍵的列排序信息?

回答

1

就像這樣 - 您可以將OBJECT_NAME(o.parent_object_id)='tablename'添加到單個PK的位置。通過少量調整,它也可以爲您提供所有索引的數據。

SELECT OBJECT_SCHEMA_NAME(o.parent_object_id) AS [Schema], OBJECT_NAME(o.parent_object_id) AS [Table], o.name AS PrimaryKey, ic.index_id, ic.key_ordinal, c.name AS ColumnName, t.name AS DataType, ic.is_descending_key 
from sys.objects o 
inner join sys.indexes i on i.object_id = o.parent_object_id and i.is_primary_key = 1 
inner join sys.index_columns ic on ic.object_id = i.object_id and ic.index_id = i.index_id 
inner join sys.columns c on c.object_id = o.parent_object_id and c.column_id = ic.column_id 
inner join sys.types t ON t.user_type_id = c.user_type_id 
where o.type = 'PK' 
ORDER BY OBJECT_SCHEMA_NAME(o.parent_object_id), OBJECT_NAME(o.parent_object_id), ic.key_ordinal 

在更一般的說明中,使用MS的DMV通常會顯示比INFORMATION_SCHEMA視圖更多的信息,例如,用戶數據類型&其他SQL Server特有的功能。

+0

謝謝,這正是我正在尋找 –

+0

@KevinHolditch沒問題的隊友 –