首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server模糊查询验证

Server模糊查询验证
EN

Stack Overflow用户
提问于 2015-03-30 13:49:37
回答 2查看 86关注 0票数 1

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

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

我无法解释为什么这个查询

代码语言:javascript
复制
IF 0 = 1 -- Check if NotExistingTable exists in my database
BEGIN
    SELECT NotExistingColumn FROM NotExistingTable
END
GO

正确执行,但查询

代码语言:javascript
复制
IF 0 = 1 -- Check if NotExistingColumn exists in my ExistingTable
BEGIN
    SELECT NotExistingColumn FROM ExistingTable
END
GO

返回无效列名'NotExistingColumn'

在这两种情况下,如果没有执行IF块,并且包含一个无效的查询(第一个缺少表,第二个是列)。

在一种情况下,SQL引擎是否有理由检查语法erorrs?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-30 14:09:57

Deffered name resolution

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

票数 5
EN

Stack Overflow用户

发布于 2015-03-30 14:23:24

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

代码语言:javascript
复制
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; 

上面的查询将提取列名和tablename部分匹配的所有表/列,只需将类似的%更改为完全匹配即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29347947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档