Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
使用TSQL,XQuery结果返回>;1我需要在查询中搜索的ID_Tsql_Xquery - Fatal编程技术网

使用TSQL,XQuery结果返回>;1我需要在查询中搜索的ID

使用TSQL,XQuery结果返回>;1我需要在查询中搜索的ID,tsql,xquery,Tsql,Xquery,我在SQLServer2005DB中有一列,其中包含一个存储为字符串的XML。在该XML中有以下元素树 <DriverDetails> <DriverDetail> <ID>2334</ID> <PRN>1</PRN> </DriverDetail> <DriverDetail> <ID>2335</ID> <PRN>2&

我在SQLServer2005DB中有一列,其中包含一个存储为字符串的XML。在该XML中有以下元素树

<DriverDetails>
  <DriverDetail>
    <ID>2334</ID>
    <PRN>1</PRN>
  </DriverDetail>
  <DriverDetail>
    <ID>2335</ID>
    <PRN>2</PRN>
  </DriverDetail>
  <DriverDetail>
    <ID>2336</ID>
    <PRN>3</PRN>
  </DriverDetail>
  <DriverDetail>
    <ID>2337</ID>
    <PRN>4</PRN>
  </DriverDetail>
</DriverDetails>
我需要查询每个DriverDetail节点中的每个ID,以查看它是否存在于另一个名为DriverDetails的表中。相关列为[DriverDetail].[Id]

现在,我可以像这样运行XQuery:

CONVERT(xml, detailRiskInformation).query('
            for $i in //DriverDetail
            return data( $i )
        ')
不过,它只返回一个结果,其中4个ID由空格分隔

如何在一个查询中对每个ID执行迭代查询?或者,如果没有,我如何使用光标或更聪明的东西将其取出

提前谢谢
Ant

如果您希望检索ID值作为“表”以在select中使用,请尝试以下操作

DECLARE @xml XML

SET @xml = '
<DriverDetails> 
  <DriverDetail> 
    <ID>2334</ID> 
    <PRN>1</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2335</ID> 
    <PRN>2</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2336</ID> 
    <PRN>3</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2337</ID> 
    <PRN>4</PRN> 
  </DriverDetail> 
</DriverDetails>
'

SELECT  T.c.value('.', 'int') ID
FROM    @xml.nodes('/DriverDetails/DriverDetail/ID') T(c)
DECLARE@xml
SET@xml=
2334
1.
2335
2.
2336
3.
2337
4.
'
选择T.c.value('.',int')ID
来自@xml.nodes('/DriverDetails/DriverDetail/ID')T(c)
或者从表列中可以看到

DECLARE @Table TABLE(
        XmlVal XML
)

INSERT INTO @Table
SELECT '<DriverDetails> 
  <DriverDetail> 
    <ID>2334</ID> 
    <PRN>1</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2335</ID> 
    <PRN>2</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2336</ID> 
    <PRN>3</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2337</ID> 
    <PRN>4</PRN> 
  </DriverDetail> 
</DriverDetails>
'

INSERT INTO @Table
SELECT '<DriverDetails> 
  <DriverDetail> 
    <ID>1</ID> 
    <PRN>1</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2</ID> 
    <PRN>2</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>3</ID> 
    <PRN>3</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>4</ID> 
    <PRN>4</PRN> 
  </DriverDetail> 
</DriverDetails>
'


SELECT  T2.Loc.value('.', 'int') ID
FROM    @Table T
CROSS APPLY XmlVal.nodes('/DriverDetails/DriverDetail/ID') as T2(Loc) 
DECLARE@Table(
xmlvalxml
)
插入@Table
选择'
2334
1.
2335
2.
2336
3.
2337
4.
'
插入@Table
选择'
1.
1.
2.
2.
3.
3.
4.
4.
'
选择T2.Loc.value('.','int')ID
来自@Table T
交叉应用XmlVal.nodes('/DriverDetails/DriverDetail/ID')作为T2(Loc)

如果您希望检索ID值作为“表”用于select,请尝试以下操作

DECLARE @xml XML

SET @xml = '
<DriverDetails> 
  <DriverDetail> 
    <ID>2334</ID> 
    <PRN>1</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2335</ID> 
    <PRN>2</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2336</ID> 
    <PRN>3</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2337</ID> 
    <PRN>4</PRN> 
  </DriverDetail> 
</DriverDetails>
'

SELECT  T.c.value('.', 'int') ID
FROM    @xml.nodes('/DriverDetails/DriverDetail/ID') T(c)
DECLARE@xml
SET@xml=
2334
1.
2335
2.
2336
3.
2337
4.
'
选择T.c.value('.',int')ID
来自@xml.nodes('/DriverDetails/DriverDetail/ID')T(c)
或者从表列中可以看到

DECLARE @Table TABLE(
        XmlVal XML
)

INSERT INTO @Table
SELECT '<DriverDetails> 
  <DriverDetail> 
    <ID>2334</ID> 
    <PRN>1</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2335</ID> 
    <PRN>2</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2336</ID> 
    <PRN>3</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2337</ID> 
    <PRN>4</PRN> 
  </DriverDetail> 
</DriverDetails>
'

INSERT INTO @Table
SELECT '<DriverDetails> 
  <DriverDetail> 
    <ID>1</ID> 
    <PRN>1</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>2</ID> 
    <PRN>2</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>3</ID> 
    <PRN>3</PRN> 
  </DriverDetail> 
  <DriverDetail> 
    <ID>4</ID> 
    <PRN>4</PRN> 
  </DriverDetail> 
</DriverDetails>
'


SELECT  T2.Loc.value('.', 'int') ID
FROM    @Table T
CROSS APPLY XmlVal.nodes('/DriverDetails/DriverDetail/ID') as T2(Loc) 
DECLARE@Table(
xmlvalxml
)
插入@Table
选择'
2334
1.
2335
2.
2336
3.
2337
4.
'
插入@Table
选择'
1.
1.
2.
2.
3.
3.
4.
4.
'
选择T2.Loc.value('.','int')ID
来自@Table T
交叉应用XmlVal.nodes('/DriverDetails/DriverDetail/ID')作为T2(Loc)

…也就是说,我不知道这个T.c.马拉基是什么-你有链接到关于我到底在做什么的进一步解释吗?看看,然后…也就是说,我不知道这个T.c.马拉基是什么-你有链接到关于我到底在做什么的进一步解释吗?看看,然后