我对SQL查询有一个非常奇怪的问题。
IF NOT EXISTS ([special query here])
BEGIN
SELECT 1;
END
ELSE
BEGIN
SELECT 2;
END
上面的查询输出:2。
但是当我用包含create tables等的大型查询替换SELECT 1;
部分时,会抛出多个错误。在这种情况不成立的情况下,SQL Server如何在IF
语句的情况下执行代码?
答案 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
}
}
你不能写那些无意义的行,即使它在一个永远不会运行的块中,因为编译器无法确定程序的预期含义。