2009-05-07 4 views
4

クエリを解析して実行前にうまく構築されているかどうかを知る必要があります。解析が正しければ、それを破棄しないで実行します。T-SQLで実行する前に動的SQLを解析するにはどうすればよいですか?

SET NOEXEC、SET PARSEONLY、TRY/CATCHを使用してこれを達成できませんでした。

私はループ内で動的SQLを使用しています。場合によっては動的SQLは、自分の誤りではなく、データベースに存在する情報に対して間違っていることがあります。この理由から私は実行前にそれを解析したいと思います。

+1

C#コードでは? SQL Server Management Studioの内部? .....明確ではない..... –

+1

いいえ、T-SQLcode –

答えて

3

SET FMTONLY ONとSET FMTONLY OFFを試してください。

SET PARSEONLY on your code SET PARSEONLY OFFはほとんどの場合有効です。

MSDN FMTONLY

6

これは、いくつかのsp_executesqlを策略で可能であるかもしれない:私は 'salact 1' のような間違ったクエリを、使用している場合は、@result値がゼロでない

-- 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 

TRY/CATCHはsp_executesqlではうまく動作しないようですので、代わりに戻り値をチェックしています。

3

あなたは何を達成しようとしていますか?

前述のとおり、クエリが解析可能でない限り、T-SQLはコンパイルされません。

あなただけ(例:あなたはどこの文かそこらを忘れていないことを確認するために)クエリが罰金であることを確認する方法を持っているしたい場合は、多分プラン表示は、あなた

set showplan_xml on 

のに役立ちますこれは、クエリを解析するだけで(クエリ自体は実行されない)SQL Serverに指示し、その実行計画を返します。これは主にパフォーマンスの問題で使用されますが、クエリで実際に何かが間違っている場合のポインタとしても使用できます。

+1

すばらしい解決策!私はalwyasを使用してftmonlyを設定しましたが、Sql Server 2012では非推奨の機能です:( –

関連する問題