验证T-SQL查询的方法?

时间:2012-11-09 21:31:40

标签: sql sql-server tsql syntax

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

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

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

6 个答案:

答案 0 :(得分:4)

实际上,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

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

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()问题。它将捕获与表结构或列结构相关的任何内容。你需要一个架构和一个稍微不同的方法("选择顶部0 *来自()t")woudl这样做。

您可以在线使用SQL Fiddle。但是,我建议拥有数据库的本地副本。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

您可以使用NOEXEC option

SET NOEXEC ON

SELECT 1 AS Test

SET NOEXEC OFF

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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