如何查询以确定表是否具有CLUSTERED主键

Wil*_*ohl 5 sql t-sql primary-key clustered-index

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

SQL Server - 如何查找是否存在聚簇索引

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

IF NOT ([TableName] has a CLUSTERED PK)
   ALTER TABLE to add the CLUSTERED PK 
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 10

试试这个

IF NOT EXISTS (SELECT * 
               FROM sys.indexes 
               WHERE object_id = OBJECT_ID('dbo.MdsInventar') 
                 AND index_id = 1
                 AND is_primary_key = 1)
   ......
Run Code Online (Sandbox Code Playgroud)

聚集索引总是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)
   ......
Run Code Online (Sandbox Code Playgroud)