Go через каждую строку в таблице без идентификатора и вызова хранимой процедуры с XML из каждой строки - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть переменная, которая определяется следующим образом:

DECLARE @list MYDB.dbo.MessageList

Пользовательский тип MessageList содержит около 15 полей, каждое из которых может быть пустым (включая ID).

Я получаю @list в хранимой процедуре, которую я редактирую, и для каждой строки в @list мне нужно превратить эту строку в XML и передать ее другой хранимой процедуре.

Прежде всего, Я пытался выбрать одну строку из MessageList за другой на основе идентификатора, но, как оказалось, все MessageList.Id равны NULL. Затем я попытался использовать курсоры, но у меня проблемы с выполнением этой работы (синтаксические ошибки). Оба способа возникли из ответов, приведенных здесь: L oop через все строки временной таблицы и вызов хранимой процедуры для каждой строки

В случае курсоров проблема, как представляется, заключается в том, что Я не могу сделать DECLARE cur CURSOR FOR SELECT * FROM @list FOR XML RAW, BINARY BASE64, TYPE так, как мне нужно, похоже, мне нужно сначала получить саму запись, а затем преобразовать ее в XML перед ее использованием.

Было бы здорово, если бы кто-то мог предложить способ чтобы сделать это без необходимости объявлять 15 или около того переменных, отдельно для каждого поля MessageList, а затем каким-то образом соединить их после получения их с помощью курсора.

Это будет работать так, но я действительно очень не нравится это решение. Должно быть что-то лучше.

DECLARE @MessageList_Id int, @MessageList_Foo int, @MessageList_Bar varchar(64), ...

DECLARE cur CURSOR FOR SELECT Id, Foo, Bar, ...
OPEN cur

FETCH NEXT FROM cur INTO @MessageList_Id, @MessageList_Foo, @MessageList_Bar, ...
  -- Somehow put all those variables together into single row, then use row FOR XML RAW, BINARY BASE64, Type;
-- ...

Что мне нужно сделать: для каждой строки в таблице преобразовать строку в XML и выполнить хранимую процедуру с XML строки как параметр.

...