验证T-SQL查询的方法?

验证T-SQL查询的方法?,sql,sql-server,tsql,syntax,Sql,Sql Server,Tsql,Syntax,我可以访问access数据库,该数据库中的字段填充了TSQL查询。这些查询由服务器上的T-SQL处理。因此,当我编写这些SQL查询并将它们放入一个字段供终端服务器使用时,我无法验证语法等。我可以在Access数据库中创建一个临时查询,但它不是相同的查询语言。例如,Access将正确使用IIF,但TSQL不会(它将改为CASE) 我没有使用TSQL直接访问此服务器的权限,是否有一种方法可以验证我的t-SQL查询(针对语法等)?也许是网络工具在线 我应该注意,我没有访问SQL server的权限。只

我可以访问access数据库,该数据库中的字段填充了TSQL查询。这些查询由服务器上的T-SQL处理。因此,当我编写这些SQL查询并将它们放入一个字段供终端服务器使用时,我无法验证语法等。我可以在Access数据库中创建一个临时查询,但它不是相同的查询语言。例如,Access将正确使用
IIF
,但TSQL不会(它将改为
CASE

我没有使用TSQL直接访问此服务器的权限,是否有一种方法可以验证我的t-SQL查询(针对语法等)?也许是网络工具在线


我应该注意,我没有访问SQL server的权限。只有Access db和该数据库。我知道它不会验证表名等,我不希望它会验证。

SQL Server Management Studio Express(免费下载)是否能够连接到常规SQL Server实例?如果是这样,也许您可以在那里测试查询。即使无法连接到实际服务器,您可以在Express中创建数据库的测试版本,该版本至少允许您捕获语法和命名问题。

您可以通过在SQL Server计算机上执行T-SQL,并将
设置为PARSEONLY on
作为脚本的第一行,来解析T-SQL以检查有效语法。它不会验证表名或字段名,但会向您提供任何语法错误。

Data Dude(Gert Drapers)在此处介绍了如何在应用程序中使用内置SQL Server T-SQL解析器:

如果您只想检查您拥有的SQL语句的有效性,这可能是一个很好的方法,并且不需要在运行单元测试的地方安装SQL Server本身


这是一种基于.NET的方法,当然,如果您不使用实时数据库,它无法验证数据库中的对象名称,但它可以捕获T-SQL语句中的语法错误。

实际上,MattMc3的答案和FremenFreedom的答案相结合应该是可行的

下载SQLExpress

然后,声明以下存储过程:

create procedure IsValidSQL (@sql varchar(max)) as
begin
    begin try
        set @sql = 'set parseonly on;'+@sql;
        exec(@sql);
    end try
    begin catch
        return(1);
    end catch;
    return(0);
end; -- IsValidSQL
您可以使用以下工具进行测试:

declare @retval int;
exec @retval = IsValidSQL 'select iif(val, 0, 1) from t';
select @retval
或与:

declare @retval int;
exec @retval = IsValidSQL 'select val from t';
select @retval
注意:这将捕获IIF()问题。它不会捕获任何与表结构或列结构相关的内容。为此,您需要一个模式,并且需要一个稍微不同的方法(“selecttop0*from()t”)来完成


您可能可以使用SQLFiddle在线执行某些操作。但是,我建议使用数据库的本地副本。

如果它们是相当静态的,请将它们转换为Sql数据库中的存储过程,然后从access调用它们。

您可以使用:


这将很困难,尤其是当您验证特定于SQL Server中对象的查询时。这是正确的,尽管问题中没有明确列出无法连接到SQL Server数据库的限制。由于缺少表/列验证,没有什么可以阻止与SQL Express安装的连接。不必是生产数据库。我没有访问SQL Server计算机的权限。Access是我可以触摸的唯一应用程序(通过Citrix)。出于我的需要,
SET-NOEXEC ON
远远优于
SET-PARSEONLY ON
,因为此选项还可以根据架构验证查询。
SET NOEXEC ON

SELECT 1 AS Test

SET NOEXEC OFF