我正在与下面的XML工作

<AEDControl ControlGU="17fed98c-8128-4c6b-9b50-3dbe73889b9d" 
            ControlLabel="Posting Status" 
            TypeGU="6b4d08b1-6340-450c-beae-517b7d84e717" 
            ControlDescription="">
  <Elements>
    <Element ElementGU="2da346d1-2e05-4aa3-9bae-5aa9b3b75d5c" 
             Label="Active" 
             IsDefault="false"/>
    <Element ElementGU="fa8966fc-c796-4482-9ee1-f619910dc86e" 
             Label="Closed" 
             IsDefault="false"/>
    <Element ElementGU="d701a7d7-c3bd-496b-8d4b-b854a6937c3a" 
             Label="Filled" 
             IsDefault="false"/>
    <Element ElementGU="75af1941-f14f-4b7e-9f1e-5b6852c4a4f7" 
             Label="New" 
             IsDefault="false"/>
    <Element ElementGU="aa54e387-608e-4758-b4f2-c1dc485a5576" 
             Label="Pending" 
             IsDefault="true"/>
    <Element ElementGU="210aef5c-e4cf-4987-815f-0e4274b45e08" 
             Label="Scratch" 
             IsDefault="false"/>
 </Elements>

我想要查询从存储过程拉背面的标签,其具有具体的元件上ElementGU

我的存储过程如下所示:

SELECT 
   CAST(CONTROL_XML.query('data(/AEDControl/Elements/Element/@Label)') as varchar(100)) as ControlLabel 
FROM 
   Control
WHERE 
   CONTROL_XML.exist('/AEDControl/Elements/Element[@ElementGU = sql:variable("@SelectedValueGU")]') = 1

其中ElementGU是在uniqueidentifier字段通过。

我似乎具有与此没有运气。我读过,你不能做这种使用XQuery动态查询,但在同一时间,SLQ:变量()调用的XQuery的一部分,因此是没有人在那里,可以清除这件事对我?

我仍然相当新的XQuery的前面。

有帮助吗?

解决方案

您需要以不同的方式接近这一点:因为你有<Element>节点列表,我建议你创建一个节点列表,然后挑选从该列表是正确的 - 是这样的:

SELECT 
    AED.Element.value('(@Label)[1]', 'varchar(100)') as ControlLabel 
FROM
    Control
CROSS APPLY
    Control_XML.nodes('/AEDControl/Elements/Element') AS AED(Element)
WHERE
AED.Element.value('(@ElementGU)[1]', 'uniqueidentifier') = @SelectedValueGU

我不知道你是怎么想从你的基础表中选择 - 无论你想有一个WHERE子句或东西 - 但CROSS应用基本上采用了XML领域,并创建一个“伪表”,从所谓的AED.Element节点中的XPath表达式给出,和跨应用的那些基表。所以,现在,在Control每个条目,并在这些行,每一行<Element>节点,你得到的一行数据。

在该行,你现在可以挑选出其中@ElementGU值对应于值你传入的那些行,而对于那些XML节点,其中是这种情况,则再选择@Label属性的值

其他提示

我觉得这个XPath(具有sql:variable()扩展函数)应该工作:

/AEDControl
 /Elements
  /Element[@ElementGU = sql:variable("@SelectedValueGU")]
   /@Label
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top