下面是一个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