给定一个 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 内容从任意文件加载到局部变量中?
这适用于固定文件:
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)
我猜我需要使用临时表,但是如何使用?
我正在尝试获取一个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或其他一些机制来匹配该模式?
我正在使用SqlXml和返回xml而不是原始数据的存储过程.返回时实际读取数据的方式是xml,并且不知道列名.我使用了以下版本,并且听说通过序数从SqlDataReader获取数据比通过列名更快.请提供最佳且有正当理由或证据的建议
sqlDataReaderInstance.GetString(0);
sqlDataReaderInstance[0];
我有一个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)
等等
有人可以帮忙吗?
最好的问候
我看到Oracle,DB2和SQL Server包含一个新的列XML.我正在使用DB2进行开发,如果xml包含列表,则可以从数据库设计中打破1NF.
假设SQLXML可以打破1NF,我错了吗?
谢谢,
库存的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 查询:
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) 是否会导致计数执行两次,如果是这样,如何防止这种情况发生?
谢谢!
我一直在搜索这几个小时,无法弄清楚这个问题.有人可以帮我这个吗?我在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) 这个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)
参考 -