簡體   English   中英

SQL Server動態XQuery

[英]SQL Server Dynamic XQuery

我正在嘗試從SQL表中的XML(存儲為NText)中提取數據。

假設我們有兩個表,每個表都帶有XML:

|          TABLE 1          |         |     TABLE 2    |
|ID| NAME  |FIELD_DEFINITION|         |ID|DEF_ID|VALUES|
|1 |FIELD 1|     <XML1>     |         |1 |   1  |<XML2>|
|---------------------------|         |----------------|

並假設XML1的第1行和第2行看起來像這樣:

ROW 1
-----
<def>
    <prop name="Property 1" pdid="1"/>
    <prop name="Property 2" pdid="2"/>
</def>

ROW 2
-----
<def>
    <prop name="Property 1" pdid="3"/>
    <prop name="Property 2" pdid="4"/>
</def>

XML2看起來像這樣:

ROW 1
-----
<ps>
    <p pdid="1" pvalue="Value 1"/>
    <p pdid="2" pvalue="Value 2"/>
</ps>

ROW 2
-----
<ps>
    <p pdid="3" pvalue="Value 3"/>
    <p pdid="4" pvalue="Value 4"/>
</ps>

我正在嘗試獲取名為“屬性1”的任何屬性的所有值,但是XML的定義表示該值存儲在表1中,而值存儲在表2中。

我得到表1中每個條目的Property 1字段的名稱,如下所示:

SELECT
    t1.ID, t1.NAME,
    CAST(t1.FIELD_DEFINITION AS XML).value('(/def/prop[@name = "Property 1"]/@pdid)[1]','varchar(10)') as FIELD_ID
FROM
    [Table 1] t1

但是,現在如何將該pdid值傳遞到XQuery中以從表2中提取pvalue? 我希望可以完成上述操作,並在t1.ID = t2.DEF_ID表2加入表1,然后將cp.FIELD_ID傳遞到t2.VALUES.value()上的XQuery中。

這可能嗎? 還是我在這里采用錯誤的方法?

經過大量的努力(並把我的時間從其他工作中“重新分配”出去)后,我設法做到了,我將在這里張貼給任何感興趣的人。

SELECT
    t1.ID AS T1_ID, t1.NAME, t2.ID AS T2_ID,
    CAST(CAST(t1.FIELD_DEFINITION AS NVARCHAR(MAX)) + CAST(t2.VALUES AS NVARCHAR(MAX)) AS XML).value
    ('for $d in (/def/prop[@name = "Property 1"]/@pdid)[1] return (/ps/p[@pdid = $d]/@pvalue)[1]','varchar(50)') as VAL
FROM
    [Table 1] t1 INNER JOIN
    [Table 2] t2 ON t1.ID = t2.DEF_ID

好老的FLWOR來了。 在SQL中使用XML玩游戲永遠不會很快(在我的情況下,大約6秒鍾才能返回1000行),但是它可以完成工作!

暫無
暫無

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

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