2014-03-12 130 views
0

SOME_TABLE的設計者沒有定義主鍵,更糟的是,他們設置了一個可以將主鍵定義爲NULLable(其他都可以)的列。SQL Server ALTER COLUMN NOT NULL不起作用

SOME_TABLE.PrinterPos的數據不包含任何NULL值。

我在寫一個適用於〜50數據庫的升級腳本。

下面的代碼失敗:

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' 空列PRIMARY KEY約束。

看起來行第一個命令被完全忽略。雖然沒有消息表明這一點。

  1. 要把它放在它自己的批處理中,我試着用sp_executesql執行第一個命令沒有任何效果。
  2. 如果我在SQL Server Management Studio中執行第一個命令,然後執行第二個命令,那麼它將執行OK。

我需要讓這個改變完全自動化。我怎樣才能通過腳本得到這個工作?

+2

嘗試增加兩個ALTER TABLE之間的GO關鍵字命令@Sparky說 – Sparky

+0

什麼(他應該做這樣的正式答案) –

+0

對不起,我沒有做它清除腳本實際上是一個存儲過程,所以GO無效。 –

回答

0

嘗試增加兩個ALTER TABLE之間的GO關鍵字命令