0

我对 SQL 查询有一个非常奇怪的问题。

IF NOT EXISTS ([special query here])
    BEGIN
        SELECT 1;
    END
ELSE
    BEGIN
        SELECT 2;
    END

上面的查询输出:2。

但是,当我用SELECT 1;包含创建表等的大型查询替换该部分时,会引发多个错误。SQL Server 怎么可能在IF语句的情况下执行代码,而这种情况不正确?

4

2 回答 2

0

如果您正在更改模式,解析器将在运行之前查看所有实体是否存在。

ALTER TABLE myTable ADD aNewColumn INT 

UPDATE myTable SET aNewColumn = 0

这将产生错误。

只要您不从客户端获取参数,您就可以使用动态 sql。

EXEC sp_executesql N'UPDATE myTable SET aNewColumn = 0'
于 2013-03-07T14:41:25.910 回答
0

语法错误是语法错误,无论您是在将运行的条件分支还是不会运行的条件分支中。解析发生在执行之前,并且必须成功。

考虑这个用 C++ 编写的类似示例:

int main()
{
   if (false) {
       acbukasygdfukasygdaskuygdfas#@4r9837y214r
   }
}

即使它在一个永远不会运行的块内,你也不能写那句废话,因为程序的预期含义不能由编译器确定。

于 2013-03-07T14:43:45.680 回答