Próbuję utworzyć tabelę odwzorowań, aby powiązać identyfikatory nowych wierszy w tabeli z tymi, z których są one kopiowane. Klauzula OUTPUT INTO wydaje się do tego idealna, ale wydaje się, że nie zachowuje się zgodnie z dokumentacją.Jakie kolumny można zastosować w klauzuli OUTPUT INTO?
Mój kod:
DECLARE @Missing TABLE (SrcContentID INT PRIMARY KEY)
INSERT INTO @Missing
(SrcContentID)
SELECT cshadow.ContentID
FROM Private.Content AS cshadow
LEFT JOIN Private.Content AS cglobal ON cshadow.Tag = cglobal.Tag
WHERE cglobal.ContentID IS NULL
PRINT 'Adding new content headers'
DECLARE @Inserted TABLE (SrcContentID INT PRIMARY KEY, TgtContentID INT)
INSERT INTO Private.Content
(Tag, Description, ContentDate, DateActivate, DateDeactivate, SortOrder, CreatedOn, IsDeleted, ContentClassCode, ContentGroupID, OrgUnitID)
OUTPUT cglobal.ContentID, INSERTED.ContentID INTO @Inserted (SrcContentID, TgtContentID)
SELECT Tag, Description, ContentDate, DateActivate, DateDeactivate, SortOrder, CreatedOn, IsDeleted, ContentClassCode, ContentGroupID, NULL
FROM Private.Content AS cglobal
INNER JOIN @Missing AS m ON cglobal.ContentID = m.SrcContentID
Wyniki w komunikacie o błędzie:
Msg 207, Level 16, State 1, Line 34
Invalid column name 'SrcContentID'.
(linia 34 będące jednym z wyjście do)
Eksperymentowanie sugeruje, że tylko wiersze, które są w rzeczywistości obecny w celu INSERT można wybrać w OUTPUT INTO. Ale to przeczy dokumentom w książkach online. Artykuł na OUTPUT klauzuli ma Przykład E opisujący podobną Zastosowanie:
wyjście do zwrotu klauzuli VALUES z tabeli aktualizowany (WorkOrder), a także z produktu tabeli. Tabela produktów jest używana w klauzuli FROM, aby określić wiersze aktualizacji do .
Czy ktoś pracował z tą funkcją?
(W międzyczasie mam przepisany mój kod, aby wykonać zadanie za pomocą pętli kursora, ale to brzydkie i wciąż jestem ciekaw)
I zapewnia klucz do rozwiązania. Polecenie MERGE! Następnie @Simon udało się zapewnić składnię. Miły! – lambacck