2009-11-19 3 views
9

기본적으로 삽입 작업을 수행하는 T-SQL 문이 있으며 나중에 처리 할 수 ​​있도록 삽입 된 값 중 일부가 테이블 변수에 출력됩니다.T-SQL 출력 절 : 이전 ID에 액세스하는 방법

내 테이블 변수에 선택한 레코드의 이전 ID ID를 저장할 수있는 방법이 있습니까? 아래 코드를 사용하면 "다중 부분 식별자"a.ID "바인딩 할 수 없습니다."가 표시됩니다. 오류.

DECLARE @act_map_matrix table(new_act_id INT, old_ID int) 
DECLARE @new_script_id int 
SET @new_script_id = 1 

INSERT INTO Act 
(ScriptID, Number, SubNumber, SortOrder, Title, IsDeleted) 
OUTPUT inserted.ID, a.ID INTO @act_map_matrix 
    SELECT 
     @new_scriptID, a.Number, a.SubNumber, a.SortOrder, a.Title, a.IsDeleted 
    FROM Act a WHERE a.ScriptID = 2 

고마워요!

+1

"이전 ID"는 무엇입니까 ?? 당신은 새로운 행을 삽입하고 있습니다 .... –

+1

예, 새로운 행을 삽입하고 있지만 추가 처리를 위해이 새로운 행을 만드는 데 사용 된 레코드에 새 행을 매핑하는 방법이 필요합니다. 새로운 행과 해당 레코드를 매핑하는 방법이 필요합니다. – Jaime

+0

예, 업데이트로 할 수는 있지만 불행히도 삽입해야합니다. – Jaime

답변

5

"이전 값"을 얻으려면 에 Act에 다시 가입해야합니다.

그것은 단순히 INSERT 문에서 사용할 수없는

편집 : 하나 @new_scriptID가와 "scriptid = 2"를 내가 당신 같은 문제가 된 열을

+0

그것이 내가 두려워했던 것입니다. @act_map_matrix를 통해 Act에 다시 가입하면 내 @act_map_matrix에 새 ID가 포함되어 있으면 어떻게 "이전 ID"값을 얻을 수 있습니까? – Jaime

+0

당신이 @act_map_matrix에 합류 한 것을 이해하지 못했지만 결국 그것을 알아 냈습니다. DUH !!! 도움 주셔서 감사합니다. gbn !!! – Jaime

+0

해결책을 설명해 주시겠습니까? 나는 SQL2005에서 작동하는 무언가가 필요합니다. –

12

에 가입하고 http://sqlblog.com/blogs/adam_machanic/archive/2009/08/24/dr-output-or-how-i-learned-to-stop-worrying-and-love-the-merge.aspx에서 해결책을 찾을 수 있다는 희망

기본적으로 MERGE 명령을 해킹하여 삽입에 사용하므로 삽입되지 않은 OUTPUT 절의 소스 필드에 액세스 할 수 있습니다.

MERGE INTO people AS tgt 
USING #data AS src ON 
    1=0 --Never match 
WHEN NOT MATCHED THEN 
    INSERT 
    (
     name, 
     current_salary 
    ) 
    VALUES 
    (
     src.name, 
     src.salary 
    ) 
OUTPUT 
    src.input_surrogate, 
    inserted.person_id 
INTO #surrogate_map; 
+0

이것은 훌륭한 Brandon입니다, 고마워요! 그러나 불행히도 저는 SQLServer 2005를 사용하고 있으며 Merge를 지원하지 않는다고 생각합니다. 그러나이 코드는 2008 년으로 이전할지 여부와시기를 알면 좋습니다. 다시 한 번 감사드립니다. – Jaime