1) Вы можете изменить InvoiceGenerateRef, чтобы он мог дополнительно сохранять сгенерированный Ref в поле InvoiceReference. Предположительно, вы также должны предоставить параметры для определения выбора
2) Вы можете использовать курсор для обхода каждой строки в
SELECT ...
FROM Invoices
WHERE Invoices.InvoiceReference='Unknown'
и передайте детали InvoiceGenerateRef, а затем обновите строку. Это плохо ИМХО и будет медленным (Ваша лучшая ставка - решение на основе множеств)
3) Вы можете выбрать соответствующие Invoices.ID во временной таблице, которая будет находиться в области видимости для InvoiceGenerateRef, чтобы он мог выполнять эту итерацию (т. Е. Выбор КАКОГО строки для обновления является внешним для SProc, но SProc актуальное обновление)
CREATE TABLE #TEMP
(
T_ID int NOT NULL
)
INSERT INTO #TEMP (T_ID)
SELECT ID
FROM Invoices
WHERE Invoices.InvoiceReference='Unknown'
EXEC InvoiceGenerateRef @ACTION='UpdateFromTemporaryTable'
4) Вы можете изменить InvoiceGenerateRef на функцию, которая выполняла ту же задачу:
UPDATE U
SET U.InvoiceReference =
dbo.MyInvoiceGenerateRefFunction(U.ClientCode, U.EventCode)
FROM Invoices AS U
WHERE U.InvoiceReference='Unknown'
MyInvoiceGenerateRefFunction должна быть детерминированной (я думаю!)
Это был бы мой предпочтительный выбор