Sql server SQL Server不明确查询验证

Sql server SQL Server不明确查询验证,sql-server,Sql Server,我刚刚遇到了一个奇怪的SQL Server行为 在我的场景中,我有一种动态数据库,因此在运行涉及它们的查询之前,我需要检查表和列是否存在 我无法解释为什么这个问题 IF 0 = 1 -- Check if NotExistingTable exists in my database BEGIN SELECT NotExistingColumn FROM NotExistingTable END GO IF 0 = 1 -- Check if NotExistingColumn exis

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

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

我无法解释为什么这个问题

IF 0 = 1 -- Check if NotExistingTable exists in my database
BEGIN
    SELECT NotExistingColumn FROM NotExistingTable
END
GO
IF 0 = 1 -- Check if NotExistingColumn exists in my ExistingTable
BEGIN
    SELECT NotExistingColumn FROM ExistingTable
END
GO
正确执行,但查询

IF 0 = 1 -- Check if NotExistingTable exists in my database
BEGIN
    SELECT NotExistingColumn FROM NotExistingTable
END
GO
IF 0 = 1 -- Check if NotExistingColumn exists in my ExistingTable
BEGIN
    SELECT NotExistingColumn FROM ExistingTable
END
GO
返回无效的列名“NotExistingColumn”

在这两种情况下,IF块均未执行,并且包含无效查询(第一个未命中表,第二个未命中列)

SQL引擎只在一种情况下检查语法ERORR有什么原因吗

提前感谢

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

:

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


您可以在系统表中查找是否存在特定的表/列名

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%colname%'
AND t.name LIKE '%tablename%'
ORDER BY schema_name, table_name; 

上面的查询将撤回columnname和tablename部分匹配的所有表/列,只需更改like%以获得精确匹配。

您可以在系统表中查找是否存在特定的表/列名

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%colname%'
AND t.name LIKE '%tablename%'
ORDER BY schema_name, table_name; 

上面的查询将拉回所有列名与列名部分匹配的表/列,只需更改like%以获得精确匹配。

您使用的SQL Server版本是什么?您是说“现有行”还是“现有列”?@Jacodegrot我使用的是SQL Server2008@TomV是的,我需要纠正。我说的是现有列,我的朋友,你使用的是什么SQL Server版本?你说的是“现有行”还是“现有列”?@JacodeGroot我使用的是SQL Server2008@TomV是的,我需要纠正。我说的是现有的专栏,我的坏蛋这正是我想要的答案这正是我想要的答案