У меня есть хранимая процедура, в которой я передаю простой XML:
'<Products><ProductId>1</ProductId><ProductId>2</ProductId></Products>'
У меня есть таблица @temp в SQL, в которой есть столбец ProductId:
DECLARE @Temp TABLE (
ProductId NVARCHAR(10)
)
Мне нужно написать оператор вставки, который будет циклически перебирать ProductId в XML (который может быть бесконечным) и продолжать вставку (в таблицу @temp), пока в XML не останется больше узлов ProductId.
Решение с использованием курсоров невозможно!
Ниже приведен код, который я пытаюсь выполнить:
Declare @test XML
SET @test = '<Products><ProductId>1</ProductId><ProductId>2</ProductId></Products>'
DECLARE @Temp TABLE(
ProductId NVARCHAR(10)
)
INSERT INTO @Temp(ProductId)
SELECT tab.col.value('./ProductId[1]','NVARCHAR(10)') AS 'ProductId'
FROM @test
CROSS APPLY
xml_data.nodes('//Products') AS tab(col)
Я получаю сообщение об ошибке:
Must declare the table variable "@test".