SQL Server模糊查询验证

c.b*_*ear 1 sql-server

我刚刚遇到了一个好奇的SQL Server行为.

在我的场景中,我有一种动态数据库,所以我需要在运行涉及它们的查询之前检查的存在.

我无法解释为什么查询

IF 0 = 1 -- Check if NotExistingTable exists in my database
BEGIN
    SELECT NotExistingColumn FROM NotExistingTable
END
GO
Run Code Online (Sandbox Code Playgroud)

正确执行,但查询

IF 0 = 1 -- Check if NotExistingColumn exists in my ExistingTable
BEGIN
    SELECT NotExistingColumn FROM ExistingTable
END
GO
Run Code Online (Sandbox Code Playgroud)

返回无效的列名称'NotExistingColumn'.

在这两种情况下,IF块都不会执行并包含无效的查询(第一个错过一个表,第二个错过一个列).

SQL引擎在一种情况下检查语法错误是否有任何原因?

提前致谢

Rem*_*anu 5

缓冲的名称解析:

只有在引用不存在的表对象时才能使用延迟名称解析.创建存储过程时,所有其他对象必须存在.例如,在引用存储过程中的现有表时,无法列出该表的不存在的列.