Этот вопрос является продолжением предыдущего вопроса о том, как обнаружить неиспользуемые диапазоны последовательных чисел, не прибегая к курсорам ( Работа с последовательными числами в SQL Server 2005 без курсоров ).Я использую SQL Server 2005.
Что мне нужно сделать с этими номерами, так это присвоить эти номера записям в таблице.Я просто не могу придумать способ связать таблицу чисел с записями, которым нужны эти числа.
Одним из возможных решений, которое пришло на ум, была вставка записей в временную таблицу с использованием идентификатора и использованием начала диапазона номеров в качестве начального числа идентификатора.Единственная проблема с этим подходом заключается в том, что если в числовой последовательности будут пропуски, я получу дублирующие контрольные номера.
Вот так выглядят мои таблицы (слишком упрощенно):
Таблица чисел:
Number
-------
102314
102315
102319
102320
102324
102329
Таблица данных:
CustomerId PaymentAmt ControlNumber
---------- ---------- -------------
1001 4502.01 NULL
1002 890.00 NULL
9830 902923.34 NULL
Мне нужноспособ сделать так, чтобы я в итоге:
CustomerId PaymentAmt ControlNumber
---------- ---------- -------------
1001 4502.01 102314
1002 890.00 102315
9830 902923.34 102319
Возможно ли это без использования курсоров?Причина, по которой я избегаю курсоров, заключается в том, что наша текущая реализация использует курсоры, и, поскольку она очень медленная (8 минут, более 12 000 записей), я искал альтернативы.
Примечание. Спасибо всем, кто опубликовал ответы.Все они были великолепны, я должен был выбрать тот, который казался более простым для реализации и простым в обслуживании для тех, кто придет за мной.Очень ценится.