非常奇怪的SQL Server查询行为

时间:2013-03-07 14:35:08

标签: sql-server if-statement

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

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

上面的查询输出:2。

但是当我用包含create tables等的大型查询替换SELECT 1;部分时,会抛出多个错误。在这种情况不成立的情况下,SQL Server如何在IF语句的情况下执行代码?

2 个答案:

答案 0 :(得分:0)

如果要更改架构,解析器将在运行之前查看所有实体是否存在。

ALTER TABLE myTable ADD aNewColumn INT 

UPDATE myTable SET aNewColumn = 0

这会产生错误。

只要您不从客户端接收参数,就可以使用动态SQL。

EXEC sp_executesql N'UPDATE myTable SET aNewColumn = 0'

答案 1 :(得分:0)

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

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

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

你不能写那些无意义的行,即使它在一个永远不会运行的块中,因为编译器无法确定程序的预期含义。