Мне нужна хранимая процедура, которая возвращает набор идентификаторов для созданных записей. Я уже прочитал, что SCOPE_IDENTITY дает только последний идентификатор. но моего умения SQL недостаточно для решения этого конкретного случая и получения всех идентификаторов в качестве вывода.Сбор идентификаторов ВСЕХ вставленных записей в качестве результата
вот что у меня есть сейчас - это только получает идентификатор последней записи в
USE AdventureWorks2008;
DELETE FROM [HumanResources].[Shift] where [HumanResources].[Shift].Name='c' or [HumanResources].[Shift].Name='d'
IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'ShiftUpdateXml')
DROP PROCEDURE ShiftUpdateXml
GO
CREATE PROCEDURE ShiftUpdateXml
@strXML XML, @ShiftID [tinyint] = NULL OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT [HumanResources].[Shift](Name,StartTime,EndTime) SELECT
TEMP.Name,TEMP.StartTime,TEMP.EndTime
FROM (SELECT
assignreassignro.value('Name[1]','nvarchar(50)') AS Name,
assignreassignro.value('StartTime[1]','time(7)') AS StartTime,
assignreassignro.value('EndTime[1]','time(7)') AS EndTime
FROM @strXML.nodes('documentelement/assignreassignro')Documentelement(assignreassignro)) AS TEMP
SET @ShiftID = SCOPE_IDENTITY();
END
GO
DECLARE @ShiftID INT;
DECLARE @XmlVal XML= '<?xml version="1.0"?>
<documentelement>
<assignreassignro>
<Name>c</Name>
<StartTime>10:30:00.0000000</StartTime>
<EndTime>17:30:00.0000000</EndTime>
</assignreassignro>
<assignreassignro>
<Name>d</Name>
<StartTime>11:00:00.0000000</StartTime>
<EndTime>18:00:00.0000000</EndTime>
</assignreassignro>
</documentelement>'
EXEC ShiftUpdateXml @XmlVal,@ShiftID = @ShiftID OUTPUT;
PRINT @ShiftID;