5

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
4

1 に答える 1

4

制約の名前を調べて、ドロップを処理する動的 SQL を少し書くことができます。

SELECT name 
    FROM sys.key_constraints 
    WHERE parent_object_id = object_id('YourSchemaName.YourTableName')
        AND type = 'PK';
于 2012-09-05T14:46:11.740 に答える