2012-09-05 55 views
4

我想将聚集索引添加到SQL Server 2008中的现有表,并且它需要是自动化脚本,因为此表存在于多个数据库跨越多台服务器。删除具有系统生成名称的PK约束的SQL Server 2008脚本

为了添加聚簇索引,我需要删除表上的PK约束,然后将它重新添加为非聚簇。问题是PK约束的名称是自动生成的,并且在末尾添加了一个guid,所以它就像“PK_ [Table] _D9F9203400”。

该名称在所有数据库中都有所不同,而且我不确定如何编写自动化脚本,该脚本在不知道约束名称的表上删除PK约束。任何帮助表示赞赏!

更新:

下面的答案是我用过的。完整脚本:

Declare @Val varchar(100) 
Declare @Cmd varchar(1000) 

Set @Val = (
    select name 
    from sysobjects 
    where xtype = 'PK' 
    and parent_obj = (object_id('[Schema].[Table]')) 
) 
Set @Cmd = 'ALTER TABLE [Table] DROP CONSTRAINT ' + @Val 
Exec (@Cmd) 
GO 

ALTER TABLE [Table] ADD CONSTRAINT PK_Table 
    PRIMARY KEY NONCLUSTERED (TableId) 
GO 

CREATE UNIQUE CLUSTERED INDEX IX_Table_Column 
    ON Table (Column) 
GO 

回答

4

您可以查找约束的名称并编写一些动态SQL来处理丢弃。

SELECT name 
    FROM sys.key_constraints 
    WHERE parent_object_id = object_id('YourSchemaName.YourTableName') 
     AND type = 'PK'; 
相关问题