Что произойдет, если я выберу SCOPE_IDENTITY () после сбоя вставки (SQL Server 2005) - PullRequest
8 голосов
/ 20 марта 2009

Документы MSDN не совсем ясны по этому вопросу. или, может быть, я недостаточно хорошо их читаю.

Если я сделаю вставку (которая может вставить ноль строк), затем следует

;SELECT SCOPE_IDENTITY()

А затем вызвать команду через ExecuteScalar () ...

Каким будет результат, если вставка не вставит никаких строк?

Я хочу остановиться, если произойдет сбой, чтобы я не продолжал вставлять дочерние записи в неверный или неправильный идентификатор родителя.

Ответы [ 3 ]

12 голосов
/ 20 марта 2009

Если идентификатор не вставлен, SCOPE_IDENTITY () вернет значение null, вы можете проверить указанное условие, назначив SCOPE_IDENTITY () переменной, а затем проверив содержимое переменных.

Иллюстрация

Create Proc SomeInsertToFail(@ID int OUTPUT)
as
Begin
    Select @ID =  Scope_Identity()
End
Declare @SOMEID int
Exec SomeInsertToFail @SOMEID OUTPUT
Select @SOMEID  --This will yield null
4 голосов
/ 09 октября 2013

Это зависит от того, была ли УСПЕШНАЯ вставка в текущей области.

declare @tb table (i int identity, ky varchar(100));

insert into @tb values('Success');

insert into @tb select ky from @tb where ky = 'Failure';

select SCOPE_IDENTITY();  -- returns 1
select * from @tb
4 голосов
/ 20 марта 2009

NULL

source: сделал SELECT scope_identity () для пустого запроса (он же не вставил)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...