SQL Server 2008 の既存のテーブルにクラスター化インデックスを追加しようとしていますが、このテーブルは複数のサーバーにまたがる複数のデータベースに存在するため、自動化されたスクリプトである必要があります。
クラスター化インデックスを追加するには、テーブルの PK 制約を削除してから、非クラスター化として再度追加する必要があります。問題は、PK 制約の名前が自動生成され、末尾に GUID が追加されているため、「PK_ [テーブル] _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