Jeg kan ikke tale med det, som spørger beder om her, fordi det ikke giver noget forstand.
Så lad os antage et andet problem:
Lad os i stedet sige, at jeg har en heap-tabel uden identitetsfelt, men den har en "Besøgt " Dato felt.
Heap-tabellen logger personwebsidebesøg, og jeg indlæser den i mit datavarehus.
I dette datavarehus vil jeg gerne bruge surrogat-nøglen "WebHitID " for at referere til disse relationer.
Lad os bruge Merge til at udføre den første indlæsning af tabellen, og fortsæt derefter med at kalde den for at holde tabellerne synkroniseret.
Jeg ved, at hvis jeg indsætter poster ind i en tabel, så ville jeg foretrække, at ID'erne (der bliver genereret af et Identify-Field) er sekventielle baseret på hvilken som helst Order-By jeg vælger (lad os sige "Besøgt " Dato).
Det er ikke ualmindeligt at forvente, at et heltals-ID korrelerer med, hvornår det blev oprettet i forhold til resten af posterne i tabellen.
Jeg ved, at dette ikke altid er 100 % tilfældet , men humor mig et øjeblik.
Dette er muligt med Merge.
Brug af (hvad der føles som et hack ) TOP giver mulighed for sortering i vores Indsæt:
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.
;
Du kan se, at jeg valgte at bruge TOP 9223372036854775807 (det største heltal, der findes) til at trække alt.
Hvis du har ressourcerne til at fusionere mere end det, så burde du lægge det ud.
Mens dette skriger "hacky workaround " for mig burde det bringe dig derhen, hvor du skal hen.
Jeg har testet dette på et lille prøvesæt og bekræftet, at det virker. Jeg har ikke undersøgt virkningen af dets ydeevne på større komplekse sæt af data dog, så YMMV med og uden TOP.