나는 똑같은 필요가 있었고이 대답을 찾았습니다 ..
이렇게하면 회사 테이블 (comp)에 레코드가 작성되고 회사 테이블에서 작성된 자동 ID를 가져 와서 직원 테이블 (스태프)에 놓아 두 테이블을 연결할 수 있으므로 많은 직원이 한 회사에 연결됩니다. 내 SQL 2008 DB에서 작동하며 SQL 2005 이상에서 작동해야합니다.
============================
CREATE PROCEDURE [dbo].[InsertNewCompanyAndStaffDetails]
@comp_name varchar(55) = 'Big Company',
@comp_regno nchar(8) = '12345678',
@comp_email nvarchar(50) = 'no1@home.com',
@recID INT OUTPUT
- ' @recID' 는 회사에서 자동 생성하려는 ID 번호를 보유하는 데 사용됩니다.
AS
Begin
SET NOCOUNT ON
DECLARE @tableVar TABLE (tempID INT)
-위의 줄은 나중에 사용하기 위해 자동 생성 된 ID 번호를 보유 할 임시 테이블을 만드는 데 사용됩니다. 그것은 단지 하나의 필드 'TEMPID'을 가지고 있으며, 그 유형 INT는 과 동일 '@recID' .
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
- ' OUTPUT이 삽입되었습니다. '위의 행은 현재 작성중인 레코드의 필드에서 데이터를 가져 오는 데 사용됩니다. 우리가 원하는이 데이터는 ID 자동 번호입니다. 따라서 테이블의 올바른 필드 이름이 'comp_id' 인지 확인하십시오 . 그런 다음 이전에 만든 임시 테이블로 삭제됩니다.
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
-위의 줄은 필요한 ID가 저장되어있는 이전에 만든 임시 테이블을 검색하는 데 사용됩니다. 이 임시 테이블에는 하나의 레코드 만 있고 하나의 필드 만 있기 때문에 필요한 ID 번호 만 선택하여 ' @recID '에 드롭합니다 . ' @recID '에는 원하는 ID 번호가 있으며 아래에서 사용한 것처럼 원하는 방식으로 사용할 수 있습니다.
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
-그렇습니다. 실제로 'OUTPUT insert.WhatEverFieldNameYouWant' 줄 에서 원하는 것을 잡고 임시 테이블에서 원하는 필드를 만들고 원하는 방식으로 액세스 할 수 있습니다.
나는 세세한 세분화와 함께 오랜 세월 동안 이와 같은 것을 찾고 있었는데 이것이 도움이되기를 바랍니다.
OUTPUT INSERTED.ID테이블에서 활성 트리거의 경우 문제를 일으킬 수 있음