sql >> Databáze >  >> RDS >> Sqlserver

Jak může SCOPE_IDENTITY vrátit hodnotu null, když @@IDENTITY ne?

zde je jeden příklad toho, jak SCOPE_IDENTITY() bude mít hodnotu null, ale @@IDENTITY bude mít hodnotu:

Pro informaci, u SCOPE_IDENTITY() je známá chyba:https:/ /connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=328811

Nejlepším řešením pro identity je použít OUTPUT INTO, dokáže zachytit sadu ID a nepodléhá chybě 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. Použití atributu více než jednou v dotazu FOR XML Path T-SQL se stejným názvem prvku

  2. WHERE Pokud není podmínka splněna, získejte všechny hodnoty včetně NULL

  3. java.lang.ArrayIndexOutOfBoundsException na oracle.jdbc.driver.T4CTTIrxd.readBitVector(T4CTTIrxd.java:135)

  4. Přidání omezení pomocí poddotazu z jiné tabulky