У меня есть XML, как показано ниже:использование переменной в XPath для SQL сервера
<BODY>
<RECORD>
<PA0002_NATIO>CH</PA0002_NATIO>
<PA0001_CITY>Lugano</PA0001_CITY>
<PA0005_VALUE>1000</PA0005_VALUE>
</RECORD>
<RECORD>
<PA0002_NATIO>DE</PA0002_NATIO>
<PA0001_CITY>Berlin</PA0001_CITY>
<PA0005_VALUE>2000</PA0005_VALUE>
</RECORD>
<RECORD>
<PA0002_NATIO>IT</PA0002_NATIO>
<PA0001_CITY>Roma</PA0001_CITY>
<PA0005_VALUE>3000</PA0005_VALUE>
</RECORD>
</BODY>
Я хотел бы изменить значение тега <PA0002_NATIO>
во всех <RECORD>
узлов и для того, чтобы сделать это подсчитать количество узлы <RECORD>
, и я делаю такой цикл, новое значение берется из таблицы.
if @countNodes > 0
begin
set @indexCount = 1
while @indexCount <= @countNodes
begin
-- get the value from the node
set @nodevalue = (@xml.value('(//RECORD[sql:variable("@indexCount")]/PA0002_NATIO/text())[1]', 'nvarchar(50)'))
-- find in the table the value to be replaced
set @repvalue = (select [Target Code] from [Ronal].[dbo].['Value Mapping$']
where [List Name]='Nationality' and [SAP Code][email protected])
-- replace the value in the node
set @xml.modify('
replace value of
(//RECORD[sql:variable("@indexCount")]/PA0002_NATIO/text())[1]
with
sql:variable("@repvalue")
');
SET @Indexcount= @Indexcount + 1;
end
end
END
теперь идея состоит в том, чтобы сделать общий замену с использованием переменной в XPath вместо использования
set @nodevalue = (@xml.value('(//RECORD[sql:variable("@indexCount")]/PA0002_NATIO/text())[1]', 'nvarchar(50)'))
Я хотел бы использовать
set @nodevalue = (@xml.value('(//RECORD[sql:variable("@indexCount")]/[sql:variable("@tag")]/text())[1]', 'nvarchar(50)'))
и из Конечно, я бы использовал тот же синтаксис для замены
-- replace the value in the node
set @xml.modify('
replace value of
(//RECORD[sql:variable("@indexCount")]/[sql:variable("@tag")]/text())[1]
with
sql:variable("@repvalue")
');
Если переменная @tag
содержит <PA0002_NATIO>
но <PA0001_CITY>
и так далее получать данные из другой таблицы, которые хранят имя тега.
Как это сделать?
Вместо 'SQL: variable' вы можете присоединиться к таблице, что нужно и использовать' SQL: column' – gofr1
я дон У меня есть таблица, у меня есть только xml – zanza67
Можете ли вы показать, какой результат вы хотите получить из XML? Почему вы говорите, что у вас нет таблицы, если вы используете это для получения значения для обновления: 'select [Target Code] из [Ronal]. [Dbo]. ['Value Mapping $'] где [Имя списка] = 'Национальность 'и [SAP Code] = @ nodevalue' – gofr1