我可以访问Access数据库,在该数据库中是填充了TSQL查询的字段。这些查询由服务器上的T-SQL处理。因此,当我编写这些SQL查询并将它们放入一个字段供终端服务器使用时,我无法验证语法/ etc。我可以在该Access数据库中创建一个临时查询,但它不是相同的查询语言。例如,Access将正确使用IIF
但TSQL不会(它将改为CASE
)。
我没有使用TSQL直接访问此服务器,有没有办法可以验证我的T-SQL查询(语法等)?也许是网上的网络工具?
我应该注意我无法访问SQL服务器。只有Access db和那个。我知道它不会验证表名等,我不指望它。
答案 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数据库中的存储过程,然后从访问中调用它们。