我发现了这个问题,但它似乎没有回答这个问题......
SQL Server - How to find if clustered index exists
如何编写IF T-SQL语句来说:
IF NOT ([TableName] has a CLUSTERED PK)
ALTER TABLE to add the CLUSTERED PK
答案 0 :(得分:10)
试试这个
IF NOT EXISTS (SELECT *
FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.MdsInventar')
AND index_id = 1
AND is_primary_key = 1)
......
聚集索引总是index_id
= 1.当然 - 如果你这样检查(is_primary_key = 1
条件),那么总有可能存在非表上的主要聚簇索引 - 因此您将无法创建另一个聚簇索引。因此,您可能需要丢失AND is_primary_key = 1
条件,并检查“是否存在聚集索引”。
更新:或者如果使用index_id = 1
似乎是黑魔法,您也可以使用type
列代替:
IF NOT EXISTS (SELECT *
FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.MdsInventar')
AND type = 1
AND is_primary_key = 1)
......
答案 1 :(得分:2)
我不确定它是否仍然是问题,但也许它会帮助另一个人。
请在下面找到部分代码:
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')
希望它对任何人都有帮助! 最诚挚的问候。