2009-11-19 15 views
9

Temel olarak bir ek yapan bir T-SQL deyim var ve eklenen değerlerin bir kısmını daha sonraki işlemler için bir tablo değişkenine OUTPUT'lar.T-SQL Çıkış Fıkraları: Eski Kimlik Kimliğine nasıl erişilir?

Seçili kayıtların eski Kimlik Kimliğini tablo değişkenime depolamanın bir yolu var mı? Aşağıdaki kodu kullanırsam, "Çok parçalı tanımlayıcı" a.ID "'yi bağlayamadım." hata.

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 

Teşekkürler!

+1

"eski" kimlik kimliği nedir? Yeni satırlar ekliyorsunuz .... –

+1

Evet, yeni satırlar ekliyorum ama daha fazla işlem için Yeni satırları bu yeni satırların oluşturulmasında kullanılan kayıtlara eşlemek için bir yola ihtiyacım var. Yeni satırı ve ilgili kaydı eşlemek için bir yolum olmalı. – Jaime

+0

Evet, bunu bir Güncelleme ile yapabilirim ama maalesef bir Ekleme yapmak zorundayım. – Jaime

cevap

5

"Eski" değeri almak için @act_map_matrix numaralı telefona Act numarasına geri katmanız gerekir.

Bu sadece INSERT deyiminde mevcut değil

düzenleme: Bir @new_scriptID ve "scriptid = 2" Ben senin de aynı sorunu vardı sütununu

+0

Bu yüzden korktum. Ancak, @act_map_matrix aracılığıyla Act'a geri dönersem, @act_map_matrix'in NEW ID'leri içeriyorsa nasıl "eski ID" değerini alabilirim. – Jaime

+0

@act_map_matrix'e geri katılarak neyi kastettiğinizi anlamadım ama sonunda bunu anladım. YAA !!! Yardım için teşekkürler gbn !!! – Jaime

+0

Çözümünüzü açıklayabilir misiniz? SQL2005 üzerinde çalışan bir şeye ihtiyacım var –

12

katılmak olmalı ve http://sqlblog.com/blogs/adam_machanic/archive/2009/08/24/dr-output-or-how-i-learned-to-stop-worrying-and-love-the-merge.aspx bir çözüm buldu ki ümit

Temel olarak, ekleme için kullanmak için MERGE komutunu keser, böylece eklenmeyen OUTPUT yan tümcesinde bir kaynak alanına erişebilirsiniz.

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

Bu harika Brandon, teşekkürler! Ama ne yazık ki SQLServer 2005 kullanıyoruz ve birleştirme desteklemediğine inanıyorum. Ancak, bu kod 2008'e geçip geçmediğimizi bilmek güzel. Tekrar teşekkürler. – Jaime