1

Microsoft Dynamics NAV データベースのバックアップを復元しようとしていますが、既にクラスター化されたキーを持つテーブルに CLUSTERED KEY を設定しようとするため、残念ながら失敗します。

NAV では、データベース内のすべての会社がテーブルの独自のコピーを取得し、会社名の前にCOMPANY$User_Setup. したがって、特定の会社のクラスター化されたキーを削除したいと思います。つまり、「Company$」で始まる名前のテーブルを意味します。

これを実行できる SQL ステートメントを持っている人はいますか?

4

1 に答える 1

1

カーソルとして実行する必要があります。各 PK 制約の名前が一貫しており、テーブル名に基づいていると仮定すると、次のようなことができます (テストされていないため、タイプミスや漠然とした構文エラーが含まれている可能性があります)。

DECLARE mycursor CURSOR FOR SELECT name FROM sysobjects WHERE name LIKE 'Company$%'

OPEN CURSOR
FETCH NEXT FROM mycursor INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sql = N'ALTER TABLE QUOTENAME(' + @tablename + ') DROP CONSTRAINT PK_' + @tablename 
    EXEC sp_ExecuteSQL @sql
    FETCH NEXT FROM mycursor INTO @tablename
END

CLOSE CURSOR
DEALLOCATE CURSOR

テーブル名に基づいて PK の名前が付けられていない場合は、これを変更して、sysconstraints または sysindexes に基づいてクエリを実行し、実際の PK 名を取得する必要があります。

于 2009-08-03T14:00:08.710 に答える