Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как може SCOPE_IDENTITY да върне нула, когато @@IDENTITY не го прави?

ето един пример за това как SCOPE_IDENTITY() ще бъде null, но @@IDENTITY ще има стойност:

За информация, има известен бъг с SCOPE_IDENTITY():https:/ /connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=328811

Най-добрият ви залог със самоличности е да използвате OUTPUT INTO, той може да улавя набор от идентификатори и не е обект на грешка 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. Премахване на дублирани записи от изглед

  2. Изберете Заявка с условие Where в зависимост от стойностите на списъка в asp.net

  3. Индексът е извън границите на масива. (Microsoft.SqlServer.smo)

  4. Как да преместите/копирате всички бази данни с потребители, схема и роли от един сървър на друг

  5. съхраняване на пароли в SQL Server