SQL 2008 R2和SQL 2012中的不同行为

时间:2012-09-13 03:20:52

标签: sql-server sql-server-2012

当我尝试更新某些数据时,如

if Exists(select * from sys.columns where Name = N'Enabled' 
          and Object_ID = Object_ID(N'SLBPool'))
      begin
            update SLBPool set SLBPool.Enabled=1
      End
GO

它在SQL 2012中显示错误“无效列名'已启用'”,但是,2008 R2没有发生 怎么来的?

2 个答案:

答案 0 :(得分:1)

这应该适用于任何版本的SQL Server(当然可以追溯到2000,IIRC)的唯一方法是,如果你在评估if条件之前阻止语句被编译 - 这将指示动态SQL:

if Exists(select * from sys.columns where Name = N'Enabled' 
          and Object_ID = Object_ID(N'SLBPool'))
      begin
            exec sp_executesql 'update SLBPool set SLBPool.Enabled=1'
      End
GO

答案 1 :(得分:0)

可能这是因为服务器实例的排序规则首选项,检查是否有效,或产生其他错误:

IF EXISTS(SELECT * FROM sys.columns WHERE name = N'Enabled' 
          AND object_id = OBJECT_ID(N'SLBPool'))
      BEGIN
            UPDATE SLBPool SET SLBPool.Enabled = 1
      END
GO