tutaj jest jednym z przykładów, jak SCOPE_IDENTITY() będzie null ale @@ IDENTITY będzie miała wartość:
wstawić do tabeli bez tożsamości, że tabela ma wyzwalacz insert że wstawia do tabeli historii z tożsamością . SCOPE_IDENTITY() będzie null (brak tożsamości w zakresie lokalnym), , ale @@ TOŻELOŚĆ zgłosi tożsamość z wyzwalacza.
FYI, jest to znany błąd z SCOPE_IDENTITY(): https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=328811
Najprościej z tożsamością jest użycie wyjście do, można go uchwycić zestaw identyfikatorów i nie podlega 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
Czy możesz podać więcej szczegółów ... np. pokaż kod, na który wywoływana jest funkcja SCOPE_IDENTITY(), i wyjaśnij inne zmienne (np. czy istnieje wyzwalacz?). –