0

問題を特定しようとしています(stackoverflow.com/q/483787/537284のトピックに似ています)。この問題はストアドプロシージャに関係しており、週に1回「ランダムに」発生します。問題を再現するために、さまざまな手順バージョンを作成して、考えられる良い結果と悪い結果を模倣しました。

  • 優れた複数行の単一結果セット。
  • 情報メッセージを含む優れた複数行の単一結果セット。
  • Raiserror(レベル11未満)を使用した優れた複数行の単一結果セット。
  • Printを使用した優れた複数行の単一結果セット。
  • 良い空の単一の結果セット。
  • 不正な構文エラー。
  • try/catchでの不正な構文エラー。
  • Raiserror(レベル11)の不良エラー。
  • Raiserror(レベル11)およびtry/catchでの不良エラー。

これらのテスト間で、try / catchバージョンの構文エラーは、私が期待するものとは異なる動作をしました。2つの結果セット(1つは空でもう1つはcatch命令から)が返されます。

構文エラーは部分的に実行されますか?試行ではなく、キャッチブロックの結果を期待していました。これをRaiserrorと比較し、重大度11を使用すると、1つの結果セットのみが返されるcatchブロックがトリガーされます。構文エラーとRaiserrorの違いは何ですか?

これが私のテスト手順です:

AS
BEGIN
    SET NOCOUNT ON
    SET ANSI_WARNINGS ON    
    SET IMPLICIT_TRANSACTIONS OFF 
    SET XACT_ABORT OFF 
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

BEGIN TRY
    --RAISERROR ('goes to message tab yes?', 11, 1) WITH NOWAIT
    SELECT '1' [myfield] FROM test_fulltext (nolock) WHERE CONTAINS(Command,'a monkey')
    RETURN 0
END TRY
BEGIN CATCH
    SELECT ERROR_NUMBER() [ErrorNumber]
END CATCH
RETURN -9999
END

これが私のテストテーブルです(他の人からリッピングされました):

CREATE TABLE test_fulltext 
( 
    SPID INT NOT NULL, 
    Status VARCHAR(32) NULL, 
    Login SYSNAME NULL, 
    HostName SYSNAME NULL, 
    BlkBy SYSNAME NULL, 
    DBName SYSNAME NULL, 
    Command VARCHAR(32) NULL, 
    CPUTime INT NULL, 
    DiskIO INT NULL, 
    LastBatch VARCHAR(14) NULL, 
    ProgramName VARCHAR(32) NULL, 
    SPID2 INT 
)
CREATE UNIQUE INDEX fulltextui ON test_fulltext(SPID);
CREATE FULLTEXT CATALOG fulltextft AS DEFAULT;
CREATE FULLTEXT INDEX ON test_fulltext(Command) KEY INDEX fulltextui;
4

1 に答える 1

0

Books Online の TRY...CATCHの備考セクションをよく読んでください。この動作を痛々しいほど詳細に説明しています。

私が理解できないのは、「構文エラーを強制する」ことに関するこのビジネス全体です...ストアドプロシージャに構文エラーがある場合、SPは作成されません。古いバージョンのストアド プロシージャを実際に実行している可能性はありますか?

于 2010-12-10T01:46:24.337 に答える