簡體   English   中英

在帶有XQuery的SQL Server 2005存儲過程中使用變量

[英]Using a variable in a SQL Server 2005 stored procedure with XQuery

我正在使用以下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:variable()調用是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 APPLY基本上會使用XML字段並從節點創建一個稱為AED.Element的“偽表”在XPath表達式中給出,並將它們交叉應用於基表。 因此,現在,對於Control每個條目以及這些行中的每個<Element>節點,您將獲得一行數據。

在該行中,您現在可以選擇@ElementGU值與您傳入的值相對應的那些行,對於這種情況,對於那些XML節點,您可以選擇@Label屬性的值

我認為此XPath(具有sql:variable()擴展功能)應該可以工作:

/AEDControl
 /Elements
  /Element[@ElementGU = sql:variable("@SelectedValueGU")]
   /@Label

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM