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

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

4

2 回答 2

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
于 2012-09-13T09:56:24.520 回答
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
于 2012-09-13T03:45:20.477 回答