Если вам нужно захватить несколько вставляемых значений идентификаторов, я бы использовал предложение 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'