Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak SCOPE_IDENTITY może zwrócić wartość null, gdy @@IDENTITY nie?

oto jeden przykład tego, jak SCOPE_IDENTITY() będzie mieć wartość null, ale @@IDENTITY będzie miał wartość:

FYI, istnieje znany błąd dotyczący SCOPE_IDENTITY():https:/ /connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=328811

Najlepszym rozwiązaniem z tożsamościami jest użycie OUTPUT INTO, które może przechwycić zestaw identyfikatorów i nie podlega błędowi 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podział T-SQL na ograniczniku

  2. Zaprojektuj proces archiwizacji danych (SQL Server 2005)

  3. Dzielenie daty na 2 kolumny (data + godzina) w SQL

  4. jak wygenerować zapytanie w SQL SERVER 2005, które daje wyjście takie jak Matrix?

  5. Jak obliczyć łączną liczbę godzin podróży między miastem x i y i na odwrót?