Не мога да говоря за това, което Питащият пита тук, защото не прави нищо смисъл.
Така че нека приемем различен проблем:
Да кажем вместо това, че имам Heap-Table без Identity-Field, но има „Посетен " Поле за дата.
Таблицата Heap-Table регистрира посещенията на уеб страницата на човек и аз го зареждам в моето хранилище за данни.
В това хранилище за данни бих искал да използвам сурогатния ключ "WebHitID " за препратка към тези релации.
Нека използваме Merge, за да извършим първоначалното зареждане на таблицата, след което да продължим да го извикваме, за да запазим таблиците в синхрон.
Знам, че ако вмъквам записи в таблица, тогава бих предпочел идентификаторите (които се генерират от Identify-Field) да бъдат последователни въз основа на избраната от мен подредба (да речем „Посетени " Дата).
Не е необичайно да се очаква Integer-ID да корелира с това кога е бил създаден спрямо останалите записи в таблицата.
Знам, че това не винаги е 100% така , но ме усмихнете за момент.
Това е възможно с Обединяване.
Използване (което се чувства като хакване ) TOP ще позволи сортиране в нашата вмъкване:
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.
;
Виждате, че избрах да използвам TOP 9223372036854775807 (най-голямото цяло число), за да изтегля всичко.
Ако имате ресурсите да обедините повече от това, тогава трябва да го разделите на части.
>Докато това крещи „хакерско решение " за мен трябва да ви отведе там, където трябва да отидете.
Тествах това на малък примерен набор и се убедих, че работи. Не съм проучвал въздействието върху производителността върху по-големи сложни набори от данни обаче, така че YMMV със и без ТОП.