下面是一個SQL查詢的摘錄,我正在使用它將表更新爲正確的數據類型(如果需要)。ALTER TABLE執行而不考慮條件評估結果
If NOT Exists(Select * From Information_Schema.Columns
Where Table_Name = N'RXINFO'
And Table_Schema = N'scriptassist'
And Column_Name = N'LastChanged'
And DATA_Type = N'TIMESTAMP'
AND IsNull(CHARACTER_MAXIMUM_LENGTH, 0) = 0)
BEGIN
Print 'LastChanged Field needed type updating'
Alter Table [scriptassist].[RXINFO] Alter Column LastChanged TIMESTAMP
END
目前的問題如下:
如果我在運行該語句使用ALTER TABLE當前的SQL Server在我拋出這個錯誤。
消息4927,級別16,狀態1,行12 無法將列'LastChanged'更改爲數據類型時間戳。
問題不是它不能改變數據類型問題是它試圖執行那個代碼塊而不管條件的評估。 在這種情況下,它應該評估爲False。
如果我把它拿出來,什麼都不會發生,印刷聲明甚至不會引發火災。
我到目前爲止唯一能想到的就是MS SQL事先評估SQL並確定是否所有代碼路徑都可以執行,並且因爲它們不能引發錯誤。然而這並沒有多大意義。
在SQL Server 2008 R2上運行相同的代碼時,我沒有收到任何錯誤。 你說它*應該*評估爲false。您是否將您的選擇標準拉出以確保它返回結果? – 2010-10-25 18:55:45
@mootinator,是的,我做到了。 – msarchet 2010-10-25 18:57:30