如何在T-SQL中执行之前解析动态SQL?

5 t-sql parsing sql-server-2005 dynamic-sql

我需要知道如何解析一个查询,以便在执行之前知道它是否构建良好.如果解析是正确的,那么执行它,如果不丢弃它.

我无法使用SET NOEXEC,SET PARSEONLY,TRY/CATCH完成此操作.

我在循环中使用动态sql.有时动态sql不正确,不是因为我的错,而是因为数据库中存在的信息.出于这个原因,我想在执行之前解析它.

And*_*mar 7

对于某些sp_executesql技巧,这可能是可能的:

-- The query you would like to parse
declare @sql nvarchar(max)
set @sql = 'select 1'

declare @testsql nvarchar(max)
declare @result int
set @testsql = N'set parseonly on; ' + @sql
exec @result = sp_executesql @testsql

-- If it worked, execute it
if @result = 0
    begin
    exec sp_executesql @sql
    end
Run Code Online (Sandbox Code Playgroud)

如果我使用不正确的查询,例如'salact 1',则@result值非零.

TRY/CATCH似乎与sp_executesql不兼容,所以我正在检查返回值.


Sha*_*ady 3

尝试使用 SET FMTONLY ON 和 SET FMTONLY OFF。

SET PARSEONLY ON 你的代码 SET PARSEONLY OFF 应该适用于大多数人。

MSDN FMTONLY