5

クエリを解析して、実行する前に適切にビルドされているかどうかを確認する方法を知る必要があります。解析が正しい場合は実行し、そうでない場合は破棄します。

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

ループ内で動的SQLを使用しています。動的SQLは、私のせいではなく、データベースに存在する情報に対して正しくない場合があります。このため、実行前に解析したいと思います。

4

3 に答える 3

8

これは、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

'salact 1'のような間違ったクエリを使用すると、@result値はゼロ以外になります。

TRY / CATCHはsp_executesqlでうまく機能しないようです。そのため、代わりに戻り値を確認しています。

于 2009-05-07T11:06:09.120 に答える
3

SETFMTONLYONおよびSETFMTONLYOFFを使用してみてください。

ただし、SETPARSEONLYONコードでSETPARSEONLYOFFはほとんどの場合機能します。

MSDN FMTONLY

于 2009-05-07T11:03:35.943 に答える
3

何を達成しようとしていますか?

前に述べたように、クエリが解析可能でない限り、T-SQLはコンパイルされません。

クエリが正常であることを確認する方法(たとえば、whereステートメントなどを忘れていないことを確認する方法)が必要な場合は、showplanが役立ちます。

set showplan_xml on

これにより、SQLサーバーはクエリを解析し(クエリ自体は実行されません)、その実行プランを返すように指示されます。これは主にパフォーマンスの問題に使用されますが、クエリで実際に何かが正しくない場合のポインタとしても使用できます。

于 2009-05-07T11:12:56.137 に答える