問題を特定しようとしています(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;