2009-11-19 12 views
9

तक कैसे पहुंचे मेरे पास एक टी-एसक्यूएल कथन है जो मूल रूप से बाद में प्रसंस्करण के लिए तालिका परिवर्तक में कुछ डालने वाले मानों को सम्मिलित करता है और OUTPUTs करता है।टी-एसक्यूएल आउटपुट क्लॉज: पुरानी पहचान आईडी

क्या मेरे टेबल वैरिएबल में चयनित रिकॉर्ड्स की पुरानी पहचान आईडी को स्टोर करने का कोई तरीका है। अगर मैं नीचे दिए गए कोड का उपयोग करता हूं, तो मुझे "बहु-भाग पहचानकर्ता" 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

क्या "पुरानी" पहचान आईडी ?? आप नई पंक्तियां डाल रहे हैं .... –

+1

हां, मैं नई पंक्तियां डाल रहा हूं लेकिन आगे की प्रक्रिया के लिए मुझे अपनी नई पंक्तियों को उन नए रिकॉर्डों में मैप करने का एक तरीका चाहिए जो इन नई पंक्तियों को बनाने में उपयोग किए गए थे। मुझे नई पंक्ति और उसके संबंधित रिकॉर्ड को मैप करने का कोई तरीका है। – Jaime

+0

हां, मुझे पता है कि मैं इसे अद्यतन के साथ कर सकता हूं लेकिन दुर्भाग्य से मुझे एक सम्मिलन करना है। – Jaime

उत्तर

5

आपको "पुराना" मान प्राप्त करने के लिए Act पर @act_map_matrix पर वापस शामिल होना होगा।

यह बस सम्मिलित बयान में उपलब्ध नहीं है

संपादित करें: एक उम्मीद @new_scriptID और "scriptid = 2" कॉलम में शामिल होने

+0

यही वह है जिसे मैं डरता था। लेकिन यदि मैं @act_map_matrix के माध्यम से अधिनियम में वापस शामिल हूं, तो मुझे "पुराने आईडी" मान कैसे प्राप्त हो सकता है यदि मेरे @act_map_matrix में नई आईडी शामिल हैं। – Jaime

+0

मुझे समझ में नहीं आया कि आप @act_map_matrix पर वापस जाकर क्या मतलब रखते थे लेकिन आखिर में इसे समझ लिया। ओह !!! मदद जीबीएन के लिए धन्यवाद !!! – 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 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

पर काम करता है यह बहुत अच्छा ब्रैंडन है, धन्यवाद! लेकिन दुर्भाग्य से मैं SQLServer 2005 का उपयोग कर रहा हूं और मेरा मानना ​​है कि यह मर्ज का समर्थन नहीं करता है। हालांकि, यह कोड जानना अच्छा है कि हम कब और कब 2008 में जाते हैं। धन्यवाद। – Jaime