wir*_*_in 5 sql t-sql sql-server sql-server-2008
我试图将聚簇索引添加到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
Run Code Online (Sandbox Code Playgroud)
您可以查找约束的名称并编写一些动态 SQL 来处理删除。
SELECT name
FROM sys.key_constraints
WHERE parent_object_id = object_id('YourSchemaName.YourTableName')
AND type = 'PK';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |