의 데이터를 모두 대상 테이블 삽입 OUTPUT 절에만 하나의 문장를 사용하는 또 다른 방법 :
--Parameters
DECLARE @TableGroup TABLE
(
Name NVARCHAR(100) NOT NULL
,Phone VARCHAR(10) NOT NULL
);
DECLARE @Type INT;
--End Of parameters
--Destination tables
DECLARE @FirstDestinationTable TABLE
(
FirstDestinationTableID INT IDENTITY(1,1) PRIMARY KEY
,Name NVARCHAR(100) NOT NULL
,Phone VARCHAR(10) NOT NULL
);
DECLARE @SecondDestinationTable TABLE
(
SecondDestinationTable INT IDENTITY(2,2) PRIMARY KEY
,FirstDestinationTableID INT NOT NULL
,[Type] INT NOT NULL
,CHECK([Type] > 0)
);
--End of destination tables
--Test1
--initialization
INSERT @TableGroup
VALUES ('Bogdan SAHLEAN', '0721200300')
,('Ion Ionescu', '0211002003')
,('Vasile Vasilescu', '0745600800');
SET @Type = 9;
--execution
INSERT @SecondDestinationTable (FirstDestinationTableID, [Type])
SELECT FirstINS.FirstDestinationTableID, @Type
FROM
(
INSERT @FirstDestinationTable (Name, Phone)
OUTPUT inserted.FirstDestinationTableID
SELECT tg.Name, tg.Phone
FROM @TableGroup tg
) FirstINS
--check records
SELECT *
FROM @FirstDestinationTable;
SELECT *
FROM @SecondDestinationTable;
--End of test1
--Test2
--initialization
DELETE @TableGroup;
DELETE @FirstDestinationTable;
DELETE @SecondDestinationTable;
INSERT @TableGroup
VALUES ('Ion Ionescu', '0210000000')
,('Vasile Vasilescu', '0745000000');
SET @Type = 0; --Wrong value
--execution
INSERT @SecondDestinationTable (FirstDestinationTableID, [Type])
SELECT FirstINS.FirstDestinationTableID, @Type
FROM
(
INSERT @FirstDestinationTable (Name, Phone)
OUTPUT inserted.FirstDestinationTableID
SELECT tg.Name, tg.Phone
FROM @TableGroup tg
) FirstINS
--check records
DECLARE @rc1 INT, @rc2 INT;
SELECT *
FROM @FirstDestinationTable;
SET @rc1 = @@ROWCOUNT;
SELECT *
FROM @SecondDestinationTable;
SET @rc2 = @@ROWCOUNT;
RAISERROR('[Test2 results] @FirstDestinationTable: %d rows; @@SecondDestinationTable: %d rows;',1,1,@rc1,@rc2);
--End of test1
코드를 게시 할 수 제대로 당신이 생각을 작동하지 않는? 삽입 된 레코드의 신원 값을 얻는데 문제가 있다면,'INSERT'는 그 값을 줄'OUTPUT' 절을 가지고 있습니다. – a1ex07
내가 올바르게 당신을 이해하고 2008 년에 있다면 [merge..output을 사용하여 source.id와 target.id 사이의 매핑을 얻습니다.] (http://stackoverflow.com/questions/5365629/using-merge-output- 소스 ID와 타겟 ID 사이의 매핑을 얻으십시오. –
예 Martin, 맞습니다. – user335160