Просто добавьте к решению в комментарии вот пример, чтобы проверить это:
DECLARE @xml XML=
'<root>
<a id="1" value="a1"/>
<a id="2" value="a2"/>
<a id="3" value="a3"/>
<a id="4" value="a4"/>
<a id="5" value="a5"/>
<a id="6" value="a6"/>
</root>';
- Мы можем использовать sql:variable()
, чтобы получить значение внешней переменной в XPath:
DECLARE @SomeVariable INT=3;
SELECT @xml.value('(/root/a[@id=sql:variable("@SomeVariable")]/@value)[1]','char(2)')
--result: "a3"
- И мы можем использовать sql:column()
, чтобы использовать значение столбца (текущей строки), чтобы сделать то же самое:
DECLARE @tbl TABLE(SomeColumn INT);
INSERT INTO @tbl VALUES(1),(3),(6);
SELECT t.SomeColumn
,@xml.value('(/root/a[@id=sql:column("SomeColumn")]/@value)[1]','char(2)')
FROM @tbl t;
Результат
1 a1
3 a3
6 a6