有没有一种方法可以测试SQL语句,看看它是否可以在C#中执行?
我不是要求通过解析SQL语句来测试它 我的意思是类似于用ADO.NET执行SQL语句,因此它实际上会在SQL Server中运行,以查看字段名是否正确、表名是否正确、stynxs是否正确、数据类型是否正确等等有没有一种方法可以测试SQL语句,看看它是否可以在C#中执行?,c#,sql,sql-server,entity-framework,ado.net,C#,Sql,Sql Server,Entity Framework,Ado.net,我不是要求通过解析SQL语句来测试它 我的意思是类似于用ADO.NET执行SQL语句,因此它实际上会在SQL Server中运行,以查看字段名是否正确、表名是否正确、stynxs是否正确、数据类型是否正确等等 以前的开发人员通过使用ADO.NET执行SQL语句并检查是否为抛出执行选项来完成此操作。但是数据返回是一个庞大的数据集,这是在浪费资源。那么,我是否可以要求SQL Server在C#?中为我执行语句检查?请尝试启用SET PARSEONLY PARSEONLY的问题是,它只检查语法结构。它
以前的开发人员通过使用ADO.NET执行SQL语句并检查是否为抛出执行选项来完成此操作。但是数据返回是一个庞大的数据集,这是在浪费资源。那么,我是否可以要求SQL Server在C#?中为我执行语句检查?请尝试启用SET PARSEONLY PARSEONLY的问题是,它只检查语法结构。它不解析表名和列名。所以
SET PARSEONLY ON
GO
SELECT nocolumn FROM no.notable;
GO
SET PARSEONLY OFF
运行没有错误
没有干净的方法可以实现您想要的目标,但您可以尝试ROWCOUNT设置:
SET ROWCOUNT 1;
BEGIN TRAN
SELECT * FROM sys.objects;-- Your statement
ROLLBACK
SET ROWCOUNT 0;
ROWCOUNT设置在达到n行后停止执行。显式事务确保不会对该数据库应用任何更改。您还可以从C#代码控制事务
这并不理想的原因是,有些操作要求SQLServer在返回一行之前完成所有工作。ORDER BY子句就是一个例子。我假设您要检查的是SELECT语句。如果是这样,你不能用SELECT TOP 1而不是SELECT来运行查询,这样它只返回一行吗?@Moonshield SELECT语句是用户定义的,我不能确保他输入的正确。如果必须执行TOP 1,则需要使用regexp检查并修改输入的SQL语句,使其具有TOP 1。@Moonshield和其他语句,我认为如果选择TOP 0而不是TOP 1,效果会更好。使用
将NOEXEC设置为ON
是否会更好?userx是正确的,如果要验证表名和列名,NOEXEC是正确的选择。