2010-07-02 13 views
5

Wstawiam rekordy z jednego db do bazy danych serwera SQL do innego. Muszę pobrać nowo wstawiony identyfikator i zaktualizować pole w tabeli źródłowej. Mogę uzyskać nowy identyfikator z opcją INSERTED bez problemu. Jednak nie mogę uzyskać identyfikatora z tabeli źródłowej. Tabela docelowa nie ma pola dla identyfikatora źródła. Tabela źródłowa jest tabelą konwersji i nie chcę zanieczyszczać tabeli docelowej polami konwersji. To może nie być możliwe, ale pomyślałem, że najpierw sprawdzę z wami.Instrukcja SQL Server wstawiająca za pomocą INSERTED, aby uzyskać nowy identyfikator i istniejący identyfikator

drop table #Table1 
CREATE TABLE #Table1 
(
    Table1ID INT, 
    Table2ID INT, 
    NAME VARCHAR(32) 
) 

INSERT INTO #Table1 
VALUES 
     (1, NULL, 'Fred') 
    ,(2, NULL, 'Tom') 
    ,(3, NULL, 'Sally')  

--ok, im inserting into #Table2 
drop table #Table2 
CREATE TABLE #Table2 
(
    [Table2ID] [int] IDENTITY(1,1) NOT NULL, 
    NAME VARCHAR(32) 
) 

--THE RUB, I want to insert Table2ID into table3 
--along with Table1ID. I cannot seem to reference table1 
--Any Ideas? 
insert into #Table2(NAME) 
OUTPUT INSERTED.Table2ID, T.Table1ID into #Table3 
select Name from #Table1 T 

Odpowiedz

5

Nie można zrobić z INSERT (sine brakuje klauzuli FROM własnych), ale można to zrobić z Merge:

MERGE INTO #Table2 as t2 
USING #Table1 as t1 ON 0=1 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (NAME) VALUES (t1.NAME) 
OUTPUT INSERTED.Table2ID, t1.Table1ID ; 
+0

Działa jak mistrz ... Dzięki Remus! – Steve

1

Umieść pole identyfikatora konwersji w tabeli. To nie zanieczyszcza stołu, właściwie obsługuje problem. Dodatkowo możesz go odzyskać w klauzuli wyjścia. Ułatwi to również aktualizowanie tabel podrzędnych. Nie widzę żadnego powodu, aby tego nie robić, chyba że masz biednych programistów używających Select * w kodzie produkcyjnym.

+0

Jesteśmy generowania model z db i starałem się uniknąć wykonać dodatkowy krok, aby nie ujawnić identyfikatora konwersji w modelu. Myślę, że twoja sugestia jest prawdopodobnie najodpowiedniejszym sposobem poradzenia sobie z konwersją. – Steve

Powiązane problemy