我有机会到Access数据库,该数据库中都充满了TSQL查询的字段。 这些查询是由T-SQL的服务器上进行处理。 所以,当我写下这些SQL查询,并把它们放到由高端服务器中使用的现场,我无法验证语法的/ etc。 我可以创建在Access数据库的临时查询,但它是不一样的查询语言。 例如,访问将正确地使用IIF
但TSQL不会(它会改为CASE
)。
我没有到这台服务器与TSQL直接访问,是有办法,我可以验证我的TSQL查询(语法等)? 也许一个网络工具在线?
我要指出,我没有访问SQL服务器。 只有Access数据库和孤独。 我的理解是不会验证表名之类的,我不希望它。
事实上,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拨弄东西。 不过,我会建议具有数据库的本地副本。
你可以分析你的T-SQL通过与执行它的SQL Server计算机上,以检查有效语法SET PARSEONLY ON
作为脚本的第一行。 它不会验证表或字段名称,但会为您提供任何语法错误。
数据多德(格特·布商行)介绍如何使用内置在这里你的应用程序的SQL Server T-SQL语法分析程序:
如果你想只检查是否安装了SQL语句的有效性 - 这可能是一个很好的路要走,而且它不需要的SQL Server本身将被安装在您运行单元测试。
这是一个基于.NET的方法,它不能-当然-如果你不使用实时数据库在数据库中验证对象名称-但它可以捕捉你的T-SQL语句的语法错误。
您可以使用NOEXEC
选项 :
SET NOEXEC ON
SELECT 1 AS Test
SET NOEXEC OFF
在SQL Server Management Studio中快车(免费下载)能够连接到常规的SQL Server实例? 如果是这样,也许你可以有测试查询。 即使你无法连接到实际的服务器,你也许可以创造快速数据库的测试版,将至少可以让你捕捉语法和命名问题。
如果他们是相当静态的,将它们转换成SQL数据库的存储过程,然后就打电话给他们的访问。