我正在尝试让我的集成测试更具幂等性。一个想法是在每次测试后执行回滚,另一个想法是如何以编程方式解析文本,类似于查询分析器或SSMS中的绿色复选框。
如何让SQL Server在不使用ADO.NET运行命令的情况下对命令进行分析?
更新:这就是最终想要的效果:
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
将捕获更多种类的错误,例如引用缺少的表或列或存储过程中缺少的参数的视图。
发布于 2010-06-21 20:02:59
我想你要找的命令是SET NOEXEC ON
。如果您为您的连接设置了此项,查询将被解析,但不会被执行。另一个选择是SET PARSEONLY ON
,但老实说,我不确定两者之间的真正区别是什么。
发布于 2010-06-21 20:11:53
埃里克的答案是+1。但我发现SET FMTONLY ON
也很有用,因为SET NOEXEC ON
似乎不会抛出所有错误。
例如:
SELECT * FROM ATableThatDoesNotExist
尽管数据库中不存在该表,但使用SET NOEXEC ON
运行会表明它是成功的。改为使用SET FMTONLY ON
运行它,将抛出"Invalid object name“错误。
SET FMTONLY ON还返回关于将要返回的结果集的元数据,这非常方便
发布于 2010-06-21 20:10:21
使用以下查询
SET PARSEONLY ON
--Your query here
SET PARSEONLY OFF
https://stackoverflow.com/questions/3084387
复制相似问题