sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kan SCOPE_IDENTITY returnere null, når @@IDENTITY ikke gør det?

her er et eksempel på, hvordan SCOPE_IDENTITY() vil være nul, men @@IDENTITY vil have en værdi:

FYI, der er en kendt fejl med SCOPE_IDENTITY():https:/ /connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=328811

Dit bedste bud med identiteter er at bruge OUTPUT INTO, det kan fange et sæt id'er og er ikke underlagt fejlen 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


  1. Hvordan kan jeg bruge en forespørgsel med pladsholder inde i anførselstegn? (perl / postgresql)

  2. Forskelle mellem INDEX, PRIMARY, UNIQUE, FULLTEXT i MySQL?

  3. MySQL DROP DATABASE Privilegium?

  4. Hvad er der galt med denne MySQL-sætning:DECLARE @ID INT