У меня есть столбец xml, и я хочу сохранить количество узлов в нем в соседнем столбце.
Например, в приведенном ниже XML-файле у меня есть 3 узла a
, и поэтому я хочувыведите его.
Однако проблема, с которой я столкнулся, заключается в том, что мне не удается создать универсальную привязанную к схеме функцию, которая бы принимала @xml и @nodeName для возврата счетчика указанного узла.
create function dbo.fnXmlCount_a (@xml xml)
returns int with schemabinding
as begin
return (@xml.value('count(//a)', 'int'))
end
declare @xml xml;
set @xml = '
<r>
<a></a>
<b></b>
<a></a>
<c>
<a></a>
</c>
</r>'
select dbo.fnXmlCount_a(@xml) aCount
Результат последней операции:
aCount
3
И затем я создаю в этой таблице столбец с таким полем xml следующим образом:
alter table [XmlTable] add column [aCount] as (dbo.fnXmlCount_a([xml])) persisted
Ноя действительно хотел бы сделать следующее:
alter table [XmlTable] add column [aCount] as (dbo.fnXmlNodeCount([xml], 'a')) persisted
Спасибо!
Обновление:
Мы все знаем, что //
действительномедленно, поэтому было бы здорово, если бы вы могли выяснить, как передать этот путь для поиска в другой переменной;по умолчанию этот путь поиска будет //
.