Sql 如何查询表是否具有聚集主键

Sql 如何查询表是否具有聚集主键,sql,tsql,primary-key,clustered-index,Sql,Tsql,Primary Key,Clustered Index,我发现了这个问题,但它似乎没有回答这个问题 如何编写IF T-SQL语句来表示: IF NOT ([TableName] has a CLUSTERED PK) ALTER TABLE to add the CLUSTERED PK 试试这个 IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID('dbo.MdsInventar')

我发现了这个问题,但它似乎没有回答这个问题

如何编写IF T-SQL语句来表示:

IF NOT ([TableName] has a CLUSTERED PK)
   ALTER TABLE to add the CLUSTERED PK 
试试这个

IF NOT EXISTS (SELECT * 
               FROM sys.indexes 
               WHERE object_id = OBJECT_ID('dbo.MdsInventar') 
                 AND index_id = 1
                 AND is_primary_key = 1)
   ......
聚集索引始终具有
索引\u id
=1。当然-如果您这样检查(使用
is_primary_key=1
条件),那么表上可能已经存在非主聚集索引,因此您将无法创建另一个聚集索引。因此,您可能需要丢失
和is_primary_key=1
条件,只检查“是否存在聚集索引”

更新:或者如果使用
index\u id=1
对您来说似乎是一种魔术,您也可以使用
类型
列:

IF NOT EXISTS (SELECT * 
               FROM sys.indexes 
               WHERE object_id = OBJECT_ID('dbo.MdsInventar') 
                 AND type = 1
                 AND is_primary_key = 1)
   ......

我不确定这是否仍然是一个问题,但也许它会帮助另一个人

请查找代码的以下部分:

SELECT COL_NAME(ic.object_id,ic.column_id) AS 'column name', 
i.object_id, i.name, i.type_desc, ds.name, ds.type_desc FROM sys.indexes i
INNER JOIN sys.data_spaces ds ON i.data_space_id = ds.data_space_id 
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
WHERE i.object_id = OBJECT_ID('NameOfYourTableWithSchemaIncluded')
希望它能帮助任何人!
致以最良好的祝愿。

这个怎么样:我认为在索引类型而不是(某种)神奇的索引id上进行过滤会更自我描述。@usr:是的,你也可以这样做-但是
索引id=1
几乎不是“神奇”。。。另外:知道聚集索引是不是也有点“神奇”,不是吗?