Nie mogę mówić, o co pyta Pytający, ponieważ nie powoduje to żadnego sens.
Załóżmy więc inny problem:
Załóżmy zamiast tego, że mam tabelę stosu bez pola tożsamości, ale ma ona „Odwiedzone " Pole daty.
Tabela sterty rejestruje odwiedziny strony internetowej osoby i ładuję ją do mojej hurtowni danych.
W tej hurtowni danych chciałbym użyć klucza zastępczego "WebHitID ", aby odwołać się do tych relacji.
Użyjmy funkcji scalania do wstępnego załadowania tabeli, a następnie kontynuuj jej wywoływanie, aby zachować synchronizację tabel.
Wiem, że jeśli wstawiam rekordy do tabeli, wolałbym, aby identyfikatory (które są generowane przez pole identyfikacyjne) były sekwencyjne na podstawie wybranego przeze mnie zamówienia (powiedzmy, że „Odwiedzone " Data).
Nierzadko można oczekiwać, że identyfikator całkowity będzie skorelowany z datą utworzenia w stosunku do pozostałych rekordów w tabeli.
Wiem, że nie zawsze tak jest w 100% , ale pociesz mnie przez chwilę.
Jest to możliwe dzięki połączeniu.
Używanie (co wydaje się hakiem ) TOP umożliwi sortowanie w naszej wstawce:
MERGE DW.dbo.WebHit AS Target --This table as an Identity Field called WebHitID.
USING
(
SELECT TOP 9223372036854775807 --Biggest BigInt (to be safe).
PWV.PersonID, PWV.WebPageID, PWV.Visited
FROM ProdDB.dbo.Person_WebPage_Visit AS PWV
ORDER BY PWV.Visited --Works only with TOP when inside a MERGE statement.
) AS Source
ON Source.PersonID = Target.PersonID
AND Source.WebPageID = Target.WebPageID
AND Source.Visited = Target.Visited
WHEN NOT MATCHED BY Target THEN --Not in Target-Table, but in Source-Table.
INSERT (PersonID, WebPageID, Visited) --This Insert populates our WebHitID.
VALUES (Source.PersonID, Source.WebPageID, Source.Visited)
WHEN NOT MATCHED BY Source THEN --In Target-Table, but not in Source-Table.
DELETE --In case our WebHit log in Prod is archived/trimmed to save space.
;
Widać, że zdecydowałem się użyć TOP 9223372036854775807 (największej liczby całkowitej), aby wyciągnąć wszystko.
Jeśli masz zasoby, aby scalić więcej niż to, powinieneś to zrobić.
Kiedy to krzyczy „hackowe obejście " według mnie powinno to doprowadzić Cię tam, gdzie chcesz.
Przetestowałem to na małym zestawie próbek i zweryfikowałem, że działa.Nie badałem wpływu na wydajność w przypadku większych złożonych zestawów jednak dane, więc YMMV z TOP i bez.