首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何以编程方式检查(解析) TSQL语句的有效性?

如何以编程方式检查(解析) TSQL语句的有效性?
EN

Stack Overflow用户
提问于 2010-06-21 19:57:30
回答 6查看 13.2K关注 0票数 51

我正在尝试让我的集成测试更具幂等性。一个想法是在每次测试后执行回滚,另一个想法是如何以编程方式解析文本,类似于查询分析器或SSMS中的绿色复选框。

如何让SQL Server在不使用ADO.NET运行命令的情况下对命令进行分析?

更新:这就是最终想要的效果:

代码语言:javascript
复制
using (DbCommand executeOnly = Factory.DbCommand())
{
    executeOnly.Connection = command.Connection;
    executeOnly.CommandType = CommandType.Text;
    executeOnly.CommandText = "SET NOEXEC ON;" + sqlCommand;
    executeOnly.Connection.Open();
    executeOnly.ExecuteNonQuery();
}
//set more properties of command.
command.Execute();

由于莫名其妙的原因,"SET PARSEONLY ON“只能在查询分析器中工作。我无法在ADO.NET连接上设置此设置。这还好,因为PARSEONLY似乎只捕获语法错误,而语法错误并不常见。SET NOEXEC ON将捕获更多种类的错误,例如引用缺少的表或列或存储过程中缺少的参数的视图。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-06-21 20:02:59

我想你要找的命令是SET NOEXEC ON。如果您为您的连接设置了此项,查询将被解析,但不会被执行。另一个选择是SET PARSEONLY ON,但老实说,我不确定两者之间的真正区别是什么。

票数 38
EN

Stack Overflow用户

发布于 2010-06-21 20:11:53

埃里克的答案是+1。但我发现SET FMTONLY ON也很有用,因为SET NOEXEC ON似乎不会抛出所有错误。

例如:

代码语言:javascript
复制
SELECT * FROM ATableThatDoesNotExist

尽管数据库中不存在该表,但使用SET NOEXEC ON运行会表明它是成功的。改为使用SET FMTONLY ON运行它,将抛出"Invalid object name“错误。

SET FMTONLY ON还返回关于将要返回的结果集的元数据,这非常方便

票数 23
EN

Stack Overflow用户

发布于 2010-06-21 20:10:21

使用以下查询

代码语言:javascript
复制
SET PARSEONLY ON
--Your query here
SET PARSEONLY OFF
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3084387

复制
相关文章

相似问题

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