Sql Server 2008'If'条件检查表中是否存在列无效

时间:2016-05-13 10:59:58

标签: sql sql-server sql-server-2008

我在一个表中有一个名为SkypeID的列,我放弃了它。我使用的查询如下,

IF NOT  EXISTS(SELECT * FROM sys.columns
        WHERE Name = N'SkypeID' AND Object_ID = Object_ID(N'Mstr_OnlineDetails'))
BEGIN
Alter Table  Mstr_OnlineDetails
 Drop column  SkypeID
END

查询已成功执行。 如果我编写以下查询并检查,则“IF”条件失败。

IF   EXISTS(SELECT * FROM sys.columns
        WHERE Name = N'SkypeID' AND Object_ID = Object_ID(N'Mstr_OnlineDetails'))
BEGIN
 Update  Mstr_OnlineDetails  Set  OnlineQuery  = SkypeID
END

查询结果显示无效列SkypeID。 我通过执行以下查询交叉检查

SELECT * FROM sys.columns
        WHERE Name = N'SkypeID' AND Object_ID = Object_ID(N'Mstr_OnlineDetails')

它返回一个空结果。那么If Condition如何失败? 任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

您在脚本的编译阶段遇到此错误。正在解析THEN。 。 。并且您的错误是解析错误。

一种方法是切换到动态SQL:

IF EXISTS(SELECT * FROM sys.columns WHERE Name = N'SkypeID' AND Object_ID = Object_ID(N'Mstr_OnlineDetails'))
BEGIN
     exec sp_executesql N'Update  Mstr_OnlineDetails Set OnlineQuery  = SkypeID'
END;