Я попробовал эти команды:
BEGIN
DECLARE @theKey INT
BEGIN TRY
INSERT INTO OrderingTest(Col0,Col1,Col2)
VALUES (1,NULL,3);
SELECT @theKey = SCOPE_IDENTITY();
END TRY
BEGIN CATCH
SET @theKey = - 1
END CATCH
select @theKey
END;
И следующее
BEGIN
DECLARE @theKey INT
SET @theKey = 1
INSERT INTO OrderingTest(Col0,Col1,Col2)
VALUES (1,NULL,3);
SELECT @theKey = SCOPE_IDENTITY();
select @theKey
END;
В обоих случаях было выполнено SELECT @theKey
, хотя во втором примере сообщение об ошибке былоотображается в окне печати.Обратите внимание, что в вашем примере вы пытаетесь вставить в таблицу TEST, а не в таблицу OrderingTest.Это выдаст ошибку и не запустит SELECT.Вы уверены, что ваш пример верен?
Обратите внимание, что в этом примере SCOPE_IDENTITY возвращает идентификатор последней успешной вставки, а не NULL
BEGIN
INSERT INTO OrderingTest(Col0,Col1,Col2) VALUES (1,2,3);
INSERT INTO OrderingTest(Col0,Col1,Col2) VALUES (1,NULL,3);
SELECT SCOPE_IDENTITY();
END;