Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment SCOPE_IDENTITY peut-il renvoyer null alors que @@IDENTITY ne le fait pas ?

voici un exemple de la façon dont SCOPE_IDENTITY() sera nul mais @@IDENTITY aura une valeur :

Pour info, il y a un bogue connu avec SCOPE_IDENTITY() :https:/ /connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=328811

Votre meilleur pari avec les identités est d'utiliser OUTPUT INTO, il peut capturer un ensemble d'identifiants et n'est pas sujet au bogue SCOPE_IDENTITY() :

declare @x table (tableID int identity not null primary key, datavalue varchar(10))
declare @y table (tableID int, datavalue varchar(10))

INSERT INTO @x values ('aaaa')
INSERT INTO @x values ('bbbb')
INSERT INTO @x values ('cccc')
INSERT INTO @x values ('dddd')
INSERT INTO @x values ('eeee')


INSERT INTO @x
    (datavalue)
    OUTPUT INSERTED.tableID, INSERTED.datavalue     --<<<<OUTPUT INTO SYNTAX
    INTO @y                                         --<<<<OUTPUT INTO SYNTAX
SELECT
    'value='+CONVERT(varchar(5),dt.NewValue)
    FROM (SELECT id as NewValue from sysobjects where id<20) dt
    ORDER BY dt.NewValue


select * from @x
select * from @y