使用xml和SQL来评估动态变量

时间:2014-03-18 18:54:34

标签: sql xml-parsing xquery

这是一个独特的问题......我想。所以我的目标是输入一个变量并从我的列中获取一行。让我解释一下我正在做的代码。

 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)

这不起作用,任何想法为什么?

好吧,我有点撒了谎。底部工作,但它返回一个空数据集

1 个答案:

答案 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")]