Sql server 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
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是的,我需要纠正。我说的是现有的专栏,我的坏蛋这正是我想要的答案这正是我想要的答案