Я пытаюсь изолировать проблему (которая напоминает тему в stackoverflow.com/q/483787/537284).Проблема связана с хранимой процедурой и возникает «случайным образом» один раз в неделю.Чтобы попытаться воспроизвести проблему, я создал различные версии процедур для имитации возможных хороших и плохих результатов:
- Хороший многострочный однобитный набор результатов.
- Хороший многострочный однократный результат с информационнымmessage.
- Хороший однорядный набор результатов с Raiserror (меньше уровня 11).
- Хороший однорядный набор результатов с Print.
- Хороший пустой набор результатов.
- Неверная синтаксическая ошибка.
- Неверная синтаксическая ошибка с try / catch.
- Неверная ошибка с Raiserror (уровень 11).
- Неверная ошибка с Raiserror (уровень11) и try / catch.
Между этими тестами синтаксическая ошибка с версией try / catch вела себя не так, как я ожидал.Возвращаются два набора результатов (один пустой, а другой из инструкции catch).
Частично ли выполняется синтаксическая ошибка?Я ожидал результата блока catch, а не попытки.Я сравнил это с Raiserror и, используя уровень серьезности 11, запускает блок 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;