如何使用"XML SET"选择记录?在SQL Server中? [英] How to select records using "XML SET" in sql server ?

查看:75
本文介绍了如何使用"XML SET"选择记录?在SQL Server中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的所有人,

我正在使用XML SET并从xml中选择一条记录,但是问题是结果是我得到了笛卡尔积.我想要简单的查询结果.
以下是相同的代码

DECLARE @parameters XML SET

@parameters=''<Parameter><id>3</id><key>ip</key><val>10.97.151.46</val></Parameter>
<Parameter><id>6</id><key>pno</key><val>107</val></Parameter>''

SELECT RecId.ID.value(''.'',''VARCHAR(20)''), RecKey.KY.value(''.'',''VARCHAR(20)''),
       RecVal.VL.value(''.'',''VARCHAR(20)'')
FROM @parameters.nodes(''/Parameter/id'') as RecId(ID), 
     @parameters.nodes(''/Parameter/key'') as RecKey(KY),
     @parameters.nodes(''/Parameter/val'') as RecVal(VL)


输出
=====

  3  ip  10 . 97 . 151 . 46 
 3  pno  10 . 97 . 151 . 46 
 3  ip  107 
 3  pno  107 
 6  ip  10 . 97 . 151 . 46 
 6  pno  10 . 97 . 151 . 46 
 6  ip  107 
 6  pno  107  


预期产量
===========

  3  ip  10 . 97 . 151 . 46 
 6  pno  107  



请帮助我.
谢谢.

解决方案

您不需要三个不同的表即可获得所需的结果.请考虑以下内容:

  SELECT  RecId.ID.query(' ' '  VARCHAR(20)'),
        RecId.ID.query('  val').value(' .''  VARCHAR( 20)')
 FROM   @ parameters  .nodes(' /Parameter') as  RecId(ID)


Dear All,

I am using the XML SET and selecting a records from xml, but problem is that in result i am getting the cartesian product as a result. And i want simple query result.
Following is the code for same

DECLARE @parameters XML SET

@parameters=''<Parameter><id>3</id><key>ip</key><val>10.97.151.46</val></Parameter>
<Parameter><id>6</id><key>pno</key><val>107</val></Parameter>''

SELECT RecId.ID.value(''.'',''VARCHAR(20)''), RecKey.KY.value(''.'',''VARCHAR(20)''),
       RecVal.VL.value(''.'',''VARCHAR(20)'')
FROM @parameters.nodes(''/Parameter/id'') as RecId(ID), 
     @parameters.nodes(''/Parameter/key'') as RecKey(KY),
     @parameters.nodes(''/Parameter/val'') as RecVal(VL)


Output
=====

3   ip   10.97.151.46
3   pno  10.97.151.46
3   ip   107
3   pno  107
6   ip   10.97.151.46
6   pno  10.97.151.46
6   ip   107
6   pno  107


Expected Output
============

3   ip   10.97.151.46
6   pno  107



Please help me into this.
Thanks.

解决方案

You don''t need three different tables to get the desired result. Consider the following:

SELECT RecId.ID.query('key').value('.','VARCHAR(20)'),
        RecId.ID.query('val').value('.','VARCHAR(20)')
FROM @parameters.nodes('/Parameter') as RecId(ID)


这篇关于如何使用"XML SET"选择记录?在SQL Server中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆