0

The designers of table SOME_TABLE did not define a primary key, and worse, they set one of the columns that could define the primary key as NULLable (the others are OK).

The data for SOME_TABLE.PrinterPos does not contain any NULL values.

I am writing an upgrade script to apply to ~50 databases.

The following code is failing:

ALTER TABLE dbo.SOME_TABLE 
ALTER COLUMN PrinterPos smallint NOT NULL;

ALTER TABLE dbo.SOME_TABLE 
ADD CONSTRAINT PK_SOME_TABLE 
PRIMARY KEY CLUSTERED (SOME_TABLE_ID ASC, Store_ID ASC, PrinterPos ASC)
       WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, 
             IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, 
             ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY];

私はメッセージを受け取ります

テーブル 'SOME_TABLE' の null 許容列に PRIMARY KEY 制約を定義できません。

最初のコマンドが完全に無視されているようです。これを示すメッセージはありませんが。

  1. それを独自のバッチに入れるために、最初のコマンドを使用sp_executesqlして実行しようとしましたが、効果はありませんでした。
  2. SQL Server Management Studio で最初のコマンドを実行し、続いて 2 番目のコマンドを実行すると、正常に実行されます。

この変更を完全に自動化する必要があります。スクリプトを介してこれを機能させるにはどうすればよいですか?

4

1 に答える 1

0

2 つの ALTER TABLE コマンドの間に GO キーワードを追加してみてください

于 2014-03-12T23:34:22.093 に答える