验证 T-SQL 查询的方法?

JBu*_*ace 3 sql t-sql sql-server syntax

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

我无法使用 TSQL 直接访问此服务器,有什么方法可以验证我的 T-SQL 查询(语法等)?也许是在线网络工具?

我应该注意我无权访问 SQL 服务器。只有 Access db 和那个。我知道它不会验证表名等,我不希望它。

Gor*_*off 5

实际上,MattMc3 的答案和 FremenFreedom 的答案的组合应该有效。

下载 SQL Express。

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

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
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法对其进行测试:

declare @retval int;
exec @retval = IsValidSQL 'select iif(val, 0, 1) from t';
select @retval
Run Code Online (Sandbox Code Playgroud)

或与:

declare @retval int;
exec @retval = IsValidSQL 'select val from t';
select @retval
Run Code Online (Sandbox Code Playgroud)

注意:这将捕获 IIF() 问题。它不会捕获与表结构或列结构相关的任何内容。您需要为此使用架构和稍微不同的方法(“从 () t 中选择顶部 0 *”) 可以做到。

您也许可以在线使用 SQL Fiddle 做一些事情。但是,我建议拥有数据库的本地副本。