标签: sqlxml

使用 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万
查看次数

SQL选择FOR XML into Solr文档

我正在尝试获取一个SQL select语句来生成符合Solr标准的XML.

给出如下表:

id | name
---------
 1 | one
 2 | two
 3 | three
Run Code Online (Sandbox Code Playgroud)

我需要一个像(有或没有根节点)的结果:

<add>
  <doc>
    <field name="id">1</field>
    <field name="name">one</field>
  </doc>
  <doc>
    <field name="id">2</field>
    <field name="name">two</field>
  </doc>
  <doc>
    <field name="id">3</field>
    <field name="name">three</field>
  </doc>
</add>
Run Code Online (Sandbox Code Playgroud)

是否可以使用FOR XML查询生成该结构,还是需要XSLT或其他一些机制来匹配该模式?

xml sql-server solr sqlxml

4
推荐指数
1
解决办法
1142
查看次数

SqlDataReader是这两个相同哪一个更快

我正在使用SqlXml和返回xml而不是原始数据的存储过程.返回时实际读取数据的方式是xml,并且不知道列名.我使用了以下版本,并且听说通过序数从SqlDataReader获取数据比通过列名更快.请提供最佳且有正当理由或证据的建议

  1. sqlDataReaderInstance.GetString(0);

  2. sqlDataReaderInstance[0];

c# sql ado.net sqlxml sqldatareader

4
推荐指数
1
解决办法
2056
查看次数

如何连接来自SQL Server XML查询的数据?

我有一个SQL查询,返回以下XML

<row>
  <urlSegment>electronics</urlSegment>
  <shortenedUrlSegment>0x58</shortenedUrlSegment>
</row>
<row>
  <urlSegment>phones</urlSegment>
  <shortenedUrlSegment>0x5AC0</shortenedUrlSegment>
</row>
<row>
  <urlSegment>curvy-simplicity</urlSegment>
  <shortenedUrlSegment>65546</shortenedUrlSegment>
</row>
Run Code Online (Sandbox Code Playgroud)

等等

我想要的输出是一个包含两列(Url和ShortenedUrl)的表,数据以url方式串联在一起,如下所示。

Url                                  | ShortenedUrl
electronics/phones/curvy-simplicity  | 0x58/0x5AC0/65546
Run Code Online (Sandbox Code Playgroud)

等等

有人可以帮忙吗?

最好的问候

xml sql sql-server sqlxml string-concatenation

4
推荐指数
1
解决办法
2385
查看次数

SQLXML会破坏1NF吗?

我看到Oracle,DB2和SQL Server包含一个新的列XML.我正在使用DB2进行开发,如果xml包含列表,则可以从数据库设计中打破1NF.

假设SQLXML可以打破1NF,我错了吗?

谢谢,

sql-server oracle db2 database-design sqlxml

4
推荐指数
1
解决办法
82
查看次数

查询ELMAH的XML字段

库存的ELMAH_Error表使用nText字段来存储错误条目。我发现通过添加XML类型的字段来实现。然后将此新字段添加到填充该字段的SPROC的INSERT语句中;我可以更好地利用ELMAH的输出。

现在,我想学习如何查询该XML字段中的特定元素值。该文档的结构为:

<error [...]>
  <serverVariables>
    <item name="ALL_HTTP">
      <value string="..." />
    </item>
    <item name="ALL_RAW">
      <value string="..." />
    </item>
    .
    .
    .
  </serverVariables>
</error>
Run Code Online (Sandbox Code Playgroud)

我需要能够查询下方特定项目的值。

因此,我正在看15seconds.com文章中的示例:

SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)')
Run Code Online (Sandbox Code Playgroud)

并尝试将这些值映射到我的字段的结构-但不能。例如

select top 10 RealXML.value('(/error/serverVariables[@id="REMOTE_HOST"]/name)[0]', 'nvarchar(30)') 
Run Code Online (Sandbox Code Playgroud)

格式化REMOTE_HOST的位置:

<item name="REMOTE_HOST">
  <value string="55.55.55.55" />
</item>
Run Code Online (Sandbox Code Playgroud)

非常感激

sql-server xpath elmah sqlxml

3
推荐指数
1
解决办法
875
查看次数

在 SELECT 和 ORDER BY 中,COUNT 是否执行两次?

我有一个这样的 SQL 查询:

SET @q =
(SELECT Id AS '@Id', COUNT(Occ) AS '@Occ' FROM Details 
 GROUP BY Id
 ORDER BY COUNT(Occ) DESC, Id ASC
 FOR XML PATH('Data'), ROOT('Stats'), ELEMENTS, TYPE)
Run Code Online (Sandbox Code Playgroud)

我设置 AS @Id 和 AS @Occ 以便 FOR XML 指令将输出转换为属性而不是元素。

我的问题: SELECT 和 ORDER BY 中两次出现 COUNT(Occ) 是否会导致计数执行两次,如果是这样,如何防止这种情况发生?

谢谢!

sql sql-server sqlxml

3
推荐指数
1
解决办法
429
查看次数

XML架构错误:缺少必需的空格

我一直在搜索这几个小时,无法弄清楚这个问题.有人可以帮我这个吗?我在VB.NET 2010中执行SQLXMLBULKLOAD时遇到上述错误.我已尝试更改我的xml声明,我的架构属性,并且无法通过此错误.这似乎是微不足道的,但我无法弄清楚.请帮忙

        <?xml version="1.0" ?>
     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
        <xsd:element name="Employees" sql:is-constant="1">
            <xsd:complexType>
                <xsd:sequence maxOccurs="unbounded">
                    <xsd:element name="Employee" sql:relation="the_Employees">
                        <xsd:complexType>
                            <xsd:sequence maxOccurs="unbounded">
                                <!--<xsd:element name="id" type="xsd:integer" />-->
                                <xsd:element name="EmployeeID"sql:field="EmpNo">
                                    <xsd:simpleType>
                                        <xsd:restriction base="xsd:string">
                                            <xsd:whiteSpace value="collapse"/>
                                        </xsd:restriction>
                                    </xsd:simpleType>
                                </xsd:element>
                                <xsd:element name="FirstName"sql:field="FirstName">
                                <xsd:simpleType>
                                    <xsd:restriction base="xsd:string">
                                        <xsd:whiteSpace value="collapse"/>
                                    </xsd:restriction>
                                </xsd:simpleType>
                            </xsd:element>
                            </xsd:sequence>
                        </xsd:complexType>
                    </xsd:element>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>
Run Code Online (Sandbox Code Playgroud)

xml xsd sqlxml bulk-load vb.net-2010

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

Oracle SQL XML 函数 - 如何在 XML Prolog 中获取编码?

这个SQL

SELECT XMLRoot(XMLType('<poid>143598</poid>'), VERSION '1.0', STANDALONE YES)
  AS xmlroot FROM DUAL; 
Run Code Online (Sandbox Code Playgroud)

生成如下输出

XMLROOT
--------------------------------------
<?xml version="1.0" standalone="yes"?>
<poid>143598</poid>
Run Code Online (Sandbox Code Playgroud)

如何在我的 xml prolog 中获取编码?

例如 - 我希望输出是这样的

XMLROOT
--------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<poid>143598</poid>
Run Code Online (Sandbox Code Playgroud)

参考 -

从数据库生成 XML 数据

sql oracle sqlxml oracle10g

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