У меня есть приложение, которое должно создать моментальный снимок идентификаторов записей, которые могут сохраняться на сервере базы данных. Я в настоящее время есть таблица, которая выглядит следующим образом:bulk-select в varbinary
CREATE TABLE Workset (
Workset_id int,
Sequence int,
Record_id int
)
который я вставить используя что-то вроде:
INSERT INTO WorkSet (Workset_id, Sequence, Record_id)
SELECT TOP 100
@Workset_id,
ROW_NUMBER() OVER (
ORDER BY -- this may be a complex ordering clause
),
Record_id
FROM SalesRecords
-- WHERE some conditions are met
Позже, я могу запросить записи идентификатора конкретной записи в рабочем наборе идентификатор и номер строки
SELECT SalesRecords.* FROM SalesRecords
JOIN WorkSet ON WorkSet.Record_Id = SalesRecords.Record_id
WHERE Workset_id = @Workset_id AND Sequence = @Sequence
проблема с этим состоит в том, что, как снимок получает большое количество данных, что я должен написать в данный быстро растет рабочий набор. Было бы необычно иметь рабочий набор в миллионах записей, и если каждый из этих элементов требует 12 байтов хранения строк, он быстро складывается.
Похоже, что более компактный способ представления данных состоял в том, чтобы хранить просто Workset_id и столбцы varbinary, содержащие все идентификаторы записей в порядке последовательности. Это позволит избежать накладных расходов на повторение идентификатора рабочего набора для каждой строки на одном и том же рабочем наборе и избегать необходимости хранить порядковые номера (поскольку они подразумеваются положением в varbinary).
Есть ли разумный способ, чтобы я мог преобразовать свой запрос INSERT во что-то, что генерирует varbinary идентификаторов записи по порядку?