这是一个独特的问题......我想。所以我的目标是输入一个变量并从我的列中获取一行。让我解释一下我正在做的代码。
SELECT
pref.query('Database/text()') as PersonSkills,
pref.query('FillQuery/text()') as PersonSkills,
pref.query('TabText/text()') as PersonSkills,
pref.query('TooltipText/text()') as PersonSkills
FROM table CROSS APPLY
Tag.nodes('/Root/Configuration/TaskSelectorControl/QueueSelector') AS People(pref)
这很好用。但是,我需要做的是将最后一部分,队列选择器作为变量传递。
DECLARE @Xml XML
DECLARE @AttributeName VARCHAR(MAX) = 'QueueSelector'
SELECT
pref.query('Database/text()') as PersonSkills,
pref.query('FillQuery/text()') as PersonSkills,
pref.query('TabText/text()') as PersonSkills,
pref.query('TooltipText/text()') as PersonSkills
FROM table CROSS APPLY
Tag.nodes('/Root/Configuration/TaskSelectorControl[@Name=sql:variable("@AttributeName")]
') AS People(pref)
这不起作用,任何想法为什么?
好吧,我有点撒了谎。底部工作,但它返回一个空数据集
答案 0 :(得分:1)
/Root/Configuration/TaskSelectorControl/QueueSelector
不等同于:
/Root/Configuration/TaskSelectorControl[@Name='QueueSelector']
上述XPath选择<TaskSelectorControl Name="QueueSelector">
的{{1}}个<QueueSelector>
个孩子。
您可以在XPath中执行此操作:
<TaskSelectorControl>
或者在评估之前联合可能更简单:
/Root/Configuration/TaskSelectorControl/*[local-name(.)=sql:variable("@AttributeName")]