3

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

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

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

4

6 回答 6

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

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

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() 问题。它不会捕获与表结构或列结构相关的任何内容。您将需要架构和稍微不同的方法(“select top 0 * from () t”)会做到这一点。

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

于 2012-11-09T21:51:41.413 回答
2

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

于 2012-11-09T21:39:27.777 回答
2

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

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

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

于 2012-11-09T21:46:06.973 回答
2

您可以使用以下NOEXEC选项

SET NOEXEC ON

SELECT 1 AS Test

SET NOEXEC OFF
于 2013-03-28T12:36:03.550 回答
0

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

于 2012-11-09T21:36:41.483 回答
0

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

于 2012-11-09T22:08:27.217 回答