Получить значения столбца идентичности при вставке - PullRequest
5 голосов
/ 16 января 2012

Я использую SQL Server 2008 для создания процедуры.

Я использую следующую инструкцию sql для вставки в таблицу аудита

 insert into  Listuser
 (
   UserID,
   ListID,
   AuditCreated
  )
   select
   UserID,
   ListID,
    GETDATE()
 from  ListUser where Surname='surname'

Я использую scope_identity() для получениястолбец идентификаторов из таблицы listuser и вставьте столбец идентификаторов в другую таблицу журналов

Если оператор выбора содержит более 1 значения, как получить значение идентификатора обоих столбцов и вставить в таблицу журналов?

Thanjs

1 Ответ

12 голосов
/ 16 января 2012

Если вам нужно захватить несколько вставляемых значений идентификаторов, я бы использовал предложение OUTPUT:

DECLARE @TableOfIdentities TABLE (IdentValue INT)

INSERT INTO dbo.Listuser(UserID, ListID, AuditCreated) 
  OUTPUT Inserted.ID INTO @TableOfIdentities(IdentValue)
  SELECT
      UserID, ListID, GETDATE()
  FROM 
      dbo.ListUser 
  WHERE
      Surname = 'surname'

Это вставит все строки в вашу таблицу ListUser и выведет всетождества, сгенерированные этой вставкой в ​​табличную переменную @TableOfIdentities

Подробнее об условии OUTPUT в MSDN

Эти значения вставляются в табличную переменную, и вы можетевыделите их из этой табличной переменной после вставки и сделайте с ними все, что вам нужно:

SELECT * FROM @TableOfIdentities

Обновление: здесь используется только переменная таблицы.- конечно, вы также можете вывести данные в «обычную» таблицу в SQL Server - и вы также можете вывести несколько значений для каждой вставленной строки, если вам это нужно - так что вы можете получить что-то вроде:

INSERT INTO dbo.Listuser(UserID, ListID, AuditCreated) 
  OUTPUT Inserted.ID, Inserted.UserID, Inserted.SurName, GETDATE() 
       INTO AuditTable(IdentValue, UserID, Surname, InsertDate)
  SELECT
      UserID, ListID, GETDATE()
  FROM 
      dbo.ListUser 
  WHERE
      Surname = 'surname'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...