SQL Server 2008脚本删除具有系统生成名称的PK约束

时间:2012-09-05 14:40:53

标签: sql sql-server sql-server-2008 tsql

我正在尝试将聚簇索引添加到SQL Server 2008中的现有表中,并且它需要是一个自动脚本,因为此表存在于多个服务器上的多个数据库中。

为了添加聚簇索引,我需要删除表上的PK约束,然后将其重新添加为unclustered。问题是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

1 个答案:

答案 0 :(得分:4)

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

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