sql >> Databasteknik >  >> RDS >> Sqlserver

Hur kan SCOPE_IDENTITY returnera null när @@IDENTITY inte gör det?

här är ett exempel på hur SCOPE_IDENTITY() kommer att vara null men @@IDENTITY kommer att ha ett värde:

FYI, det finns en känd bugg med SCOPE_IDENTITY():https:/ /connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=328811

Ditt bästa val med identiteter är att använda OUTPUT INTO, det kan fånga en uppsättning ID:n och är inte föremål för SCOPE_IDENTITY()-felet:

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. Ändra heltal till flyttal och lägga till decimalkomma

  2. Okänd fråga:infoga <TableNameX> välj *.%%bmk%% från <TableNameX>

  3. Vad betyder det med att välja 1 från tabellen?

  4. Hur man snyggt formaterar utskriften av SQL-frågor i SQLAlchemy?