使用TSQL,XQuery结果返回>;1我需要在查询中搜索的ID
我在SQLServer2005DB中有一列,其中包含一个存储为字符串的XML。在该XML中有以下元素树使用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&
<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.马拉基是什么-你有链接到关于我到底在做什么的进一步解释吗?看看,然后