Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server动态XQuery_Sql_Sql Server_Xquery Sql - Fatal编程技术网

SQL Server动态XQuery

SQL Server动态XQuery,sql,sql-server,xquery-sql,Sql,Sql Server,Xquery Sql,我试图从存储为SQL表中的NText的XML中提取数据 假设我们有两个表,每个表都有XML: | TABLE 1 | | TABLE 2 | |ID| NAME |FIELD_DEFINITION| |ID|DEF_ID|VALUES| |1 |FIELD 1| <XML1> | |1 | 1 |<XML2>| |-------------------

我试图从存储为SQL表中的NText的XML中提取数据

假设我们有两个表,每个表都有XML:

|          TABLE 1          |         |     TABLE 2    |
|ID| NAME  |FIELD_DEFINITION|         |ID|DEF_ID|VALUES|
|1 |FIELD 1|     <XML1>     |         |1 |   1  |<XML2>|
|---------------------------|         |----------------|
但是我现在如何将这个pdid值传递到一个XQuery中,以便从表2中提取pvalue呢?我希望我可以完成上述操作,并将表2连接到t1.ID=t2.DEF_ID上的表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
善良的老弗尔沃尔前来营救。在我的例子中,在SQL中使用XML永远不会很快返回1000行,但它完成了任务

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>
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
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