sql >> Database >  >> RDS >> Sqlserver

Hoe kan SCOPE_IDENTITY null retourneren als @@IDENTITY dat niet doet?

hier is een voorbeeld van hoe SCOPE_IDENTITY() null is, maar @@IDENTITY een waarde heeft:

Ter info, er is een bekende bug met SCOPE_IDENTITY():https:/ /connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=328811

Uw beste gok met identiteiten is om OUTPUT INTO te gebruiken, het kan een reeks ID's vastleggen en is niet onderhevig aan de SCOPE_IDENTITY()-bug:

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


  1. Ontleden SOAP XML in Oracle met voorbeeld

  2. Hoe meerdere rijen uit de opgeslagen procedure te retourneren? (Oracle PL/SQL)

  3. Ik wil een variabel argument doorgeven aan een extern SQL-bestand (PL/SQL met SQL*Plus)

  4. Hoe ADDDATE() werkt in MariaDB