标签: sqlxml

SQL Server:FOR XML按属性排序控制

我正在从SQL Server查询生成XML文件.

我有一些关于排序元素问题的问题.

例如,有如下简单的代码.

<test>
    <tree abc="123"/>
    <tree abc="789"/>
    <tree-order abc="456"/>
</test>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,树和树顺序是不同的元素,我想按属性排序

<test>
    <tree abc="123"/>
    <tree-order abc="456"/>
    <tree abc="789"/>
</test>
Run Code Online (Sandbox Code Playgroud)

像这样.

谁有好主意解决这个问题?

谢谢.

对不起,我有详细问题如下

AS是

 <Main>

<test>
    <tree abc="123"/>
    <tree abc="789"/>
    <tree-order abc="456"/>
</test>

<test>
    <tree abc="123"/>
    <tree abc="789"/>
    <tree-order abc="456"/>
</test>

</Main>
Run Code Online (Sandbox Code Playgroud)

成为 :

<Main>

<test>
    <tree abc="123"/>
    <tree abc="456"/>
    <tree-order abc="789/>
</test>

<test>
    <tree abc="123"/>
    <tree abc="456"/>
    <tree-order abc="789/>
</test>

</Main>
Run Code Online (Sandbox Code Playgroud)

谢谢.

xml sql sql-server xquery sqlxml

7
推荐指数
1
解决办法
1256
查看次数

SQL Server:带XML输出的两级GROUP BY

我有一个分层数据表,我试图选择作为单个分组的XML值:

列: Id, Type, SubType, SubSubType

样本数据:

Id  Type                    Subtype                    SubSubType
1   Product Documentation   Brochures                  Functional Brochures
2   Product Documentation   Brochures                  Fliers
3   Product Documentation   Data Sheets and Catalogs   Data Sheets
4   Product Documentation   Data Sheets and Catalogs   Catalogs
5   Other Documentation     Other classification       User Guides
Run Code Online (Sandbox Code Playgroud)

对于上面的数据,我想输出以下xml:

<AllTypes>
    <Type name="Product Documentation">
        <SubType name="Brochures">
            <SubSubType name="Functional Brochures"/>
            <SubSubType name="Fliers"/>
        </SubType>
        <SubType name="Data Sheets and Catalogs">
            <SubSubType name="Data Sheets"/>
            <SubSubType name="Catalogs"/>
        </SubType>
    </Type>
    <Type name="Other Documentation">
        <SubType name="Other classification">
            <SubSubType name="User Guides"/> …
Run Code Online (Sandbox Code Playgroud)

sql sqlxml sql-server-2008

6
推荐指数
1
解决办法
1万
查看次数

如何为表中的任何列选择类似字符串的记录?

我知道我可以通过使用在t-sql的表中的一列中搜索一个术语like %termToFind%.而且我知道我可以在表格中获得所有列:

SELECT * 
FROM MyDataBaseName.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = N'MyTableName`
Run Code Online (Sandbox Code Playgroud)

如何在表的每个列上执行类似的comprparison?我有一个非常大的桌子,所以我不能拼出LIKE每一列.

sql t-sql sql-server xquery sqlxml

6
推荐指数
1
解决办法
1617
查看次数

在T-SQL中通过XQuery选择时连接xml值

这是我的示例XML:

<root>
    <element>
        <subelement>
            <value code="code1">value1</value>
            <value code="code2">value2</value>
        </subelement>
    </element>
</root>
Run Code Online (Sandbox Code Playgroud)

这是我的测试查询:

DECLARE @tempTable TABLE (
    ValueCode nvarchar(MAX),
    Value nvarchar(MAX)
)

DECLARE @xml XML
select @xml = cast(c1 as xml) from OPENROWSET (BULK 'C:\test.xml', SINGLE_BLOB) as T1(c1)

INSERT INTO @tempTable
SELECT 
    Tbl.Col.value('subelement[1]/@code', 'NVARCHAR(MAX)'),
    Tbl.Col.value('subelement[1]', 'NVARCHAR(MAX)')
FROM @xml.nodes('//element') Tbl(Col)

SELECT * FROM @tempTable
Run Code Online (Sandbox Code Playgroud)

执行时,查询会给出一行,其中ValueCode列包含NULL,而Value列包含'value1value2'.我想得到的是与分隔符连接的属性和值.例如,我需要ValueCode来包含'code1; code2'和值包含'value 1; 值2' .我怎样才能做到这一点?

xml sql-server xquery sqlxml sql-server-2008

6
推荐指数
1
解决办法
4567
查看次数

SQL:查找XML节点是否存在

假设我有一个表格数据如下:样本表

我想选择Value包含该节点的所有(XML数据)Name="Hello World".我怎样才能实现它?

SQL小提琴

set @f = @XML.exist('/ArrayOfFilterColumn/SelectColumn[(@Name) eq "Hello World"]');
select @f;
Run Code Online (Sandbox Code Playgroud)

我不知道怎么能把它添加到我的地方,所以我把它放在一个小提琴里.

sql t-sql sql-server sqlxml

6
推荐指数
1
解决办法
2万
查看次数

如何从SQL Server 2008返回XML,该XML由多个选择共享一个共同父级构成

我已经尝试使用"FOR XML PATH","FOR XML EXPLICIT"和"FOR XML AUTO",但数据永远不会使用正确的层次结构.

基本上,我有一个父表(Customers)和3个子表.每个表都有一个customerid列.从Customers表到3个子表中的每一个都有一对多的关系.

作为一个模拟示例,我有一个父"客户"表,我有3个其他表 - 产品,爱好和车辆 - 所有与customerid相关的Customers表.

实现以下类型结构的SQL代码是什么 -

<Customers>
    <Customer customerid="1" name="Fred">
       <Products>
           <Product productname="table" />
           <Product productname="chair" />
           <Product productname="wardrobe" />
       </Products>
       <Hobbies>
           <Hobby hobbyname="Golf" />
           <Hobby hobbyname="Swimming" />
       </Hobbies>
       <Vehicles>
           <Vehicle name="Car" color="Red" />
           <Vehicle name="Bicycle" color="Blue" />
       </Vehicles>
    </Customer>
    <Customer customerid="2" name="Sue">
       <Products>
           <Product productname="CD player" />
           <Product productname="Picture frame" />
       </Products>
       <Hobbies>
           <Hobby hobbyname="Dancing" />
           <Hobby hobbyname="Reading" />
       </Hobbies>
       <Vehicles>
           <Vehicle name="Car" color="Yellow" />
       </Vehicles>
    </Customer>
</Customers>
Run Code Online (Sandbox Code Playgroud)

xml sql sql-server sqlxml sql-server-2008

5
推荐指数
2
解决办法
2万
查看次数

使用SQL查询XML数据列

我在查询存储在SQL Server 2012数据库中的XML数据时遇到问题.我想查询的节点树采用以下格式 -

<eForm>
   <page id="equalities" visited="true" complete="true">
      <Belief>
         <item selected="True" value="Christian">Christian</item>
         <item selected="False" value="Jewish">Jewish</item>
         ...
      </Belief>
   </page>
</eForm>
Run Code Online (Sandbox Code Playgroud)

我想要做的是返回item节点的value属性,其中selected属性等于true.我已经阅读了几篇关于在SQL中查询XML的教程,但似乎无法正确获取代码.

谢谢斯图

xml sql sqlxml sql-server-2012

5
推荐指数
1
解决办法
2万
查看次数

SQL 2012 - 遍历XML列表(更好地替代WHILE循环)

使用SQL 2012并将XML传递到存储过程,该存储过程必须接受该输入并为传递给存储过程的XML部分中的每个项目写一行.XML看起来像:

<MyXML>
    <MyMsg>My Text Message</MyMsg>
    <MsgTime>2013-09-25 10:52:37.098</MsgTime>
    <SendToList>
    <SendTo>John</SendTo>
    <SendTo>James</SendTo>
    <SendTo>Rob</SendTo>
    <SendTo>Pete</SendTo>
    <SendTo>Sam</SendTo>
    </SendToList>
</MyXML>
Run Code Online (Sandbox Code Playgroud)

存储过程的输出应该是插入表中的5行(SendTo上面各有一行),并且每个表在该表中的MyMsgMsgTime字段中具有相同的值.

我可以得到数量的计数,SendTo并可以获得XML,SendToList但我不知道如何迭代它来进行插入.

我可以使用以下SQL来获取XML中的内容.

SELECT 
x.value('(/MyXML/MyMsg)[1]', 'VARCHAR(1024)'),
x.value('(/MyXML/MsgTime)[1]', 'DATETIME'),
   @max = x.query('<e> { count(/MyXML/SendToList/SendTo) } </e>').value('e[1]','int'),
   @mlst = x.query('/MyXML/SendTo')
    FROM @XML_In.nodes('//MyXML') i(x)
Run Code Online (Sandbox Code Playgroud)

目前,我正在使用变量和a WHILE来遍历SendToList中的项目,但我知道必须有更好的方法.

SELECT @msgTo= @XML_In.value('(/MyXML/SendToList/SendTo[position()=sql:variable("@cnt")])[1]','VARCHAR(100)')
Run Code Online (Sandbox Code Playgroud)

上面的内容为我提供了SendToList中每个项目的值.
如果我选择变量@mlst,我可以看到我需要循环的XML结构.

<SendToList>
   <SendTo>John</SendTo>
   <SendTo>James</SendTo>
   <SendTo>Rob</SendTo>
   <SendTo>Pete</SendTo>
   <SendTo>Sam</SendTo>
</SendToList>
Run Code Online (Sandbox Code Playgroud)

即使是WHILE作品,它也会一个接一个地插入.我认为可用的方法应该能够完成而不是循环,但我不知道如何使用它们做我需要做的事情.

将不胜感激任何帮助或建议.

xml sql t-sql sql-server sqlxml

5
推荐指数
1
解决办法
2万
查看次数

使用 SQL XPATH 查询获取 XML 元素名称和属性值

给定一个 XML 类型的字符串,例如

declare @xml xml

SET @xml = 
'<PO>
  <Amount type="approved">10.00</Amount>
  <Year type="">2013</Year>
  <GeneralNotes>
    <Note>
      <NoteText type="instruction">CallVendor</NoteText>
      <Date type="">1-1-2013</Date>
    </Note>
    <Note type="">
      <NoteText type="instruction">ShipNow</NoteText>
      <Date type="">2-2-2013</Date>
    </Note>
  </GeneralNotes>
</PO>'
Run Code Online (Sandbox Code Playgroud)

我想获取每个元素及其属性(如果有的话)。我想要的输出(没有重复)是

ElementName   ElementAttribute

PO  
Amount   approved
Note     instruction
Run Code Online (Sandbox Code Playgroud)

我试过类似于这一行的代码

SELECT T.doc.query('fn:local-name(.)') 
FROM @xml.nodes('PO//*[1]') AS T(doc)
Run Code Online (Sandbox Code Playgroud)

这会导致重复,我不确定如何选择属性值。我只需要第一次出现(即。GeneralNotes/Note[1])。我有一个包含许多其他元素名称的大文件,所以我不想单独解析它们。

xml sql t-sql sql-server sqlxml

5
推荐指数
1
解决办法
4410
查看次数

T-SQL,将 XML 数据加载到局部变量中

我想知道,如何将 XML 内容从任意文件加载到局部变量中?

这适用于固定文件:

DECLARE @xml XML
SET @xml = 
(
  SELECT *
  FROM OPENROWSET(BULK 'C:\data.xml', SINGLE_BLOB) AS data
)
Run Code Online (Sandbox Code Playgroud)

但是,我想从任何任意文件加载数据。

这不起作用(因为 BULK 似乎只支持 String 参数)

DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
SET @xml = 
(
  SELECT *
  FROM OPENROWSET(BULK @file, SINGLE_BLOB) AS data
)
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下操作(没有成功,因为执行 EXEC 时局部变量(@xml)似乎超出了范围):

DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
DECLARE @bulk NVARCHAR(MAX) = 'SET @xml = (SELECT * FROM OPENROWSET(BULK ''' + @file + ''', SINGLE_BLOB) AS data)'
EXEC (@bulk)
Run Code Online (Sandbox Code Playgroud)

我猜我需要使用临时表,但是如何使用?

xml sql sql-server sqlxml

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

sqlxml ×10

sql ×9

sql-server ×8

xml ×7

t-sql ×4

sql-server-2008 ×3

xquery ×3

sql-server-2012 ×1