我正在尝试构造一个SQL事务,该事务将XML文件导入SQL服务器。但是,在执行此操作时出现此错误:
XML解析错误0xc00ce555发生在第1行,靠近XML文本“ 13.992004-07-03Z1972-09-25ZS75001-100000M00Bachelors Professional1410 + Miles
消息6602,级别16,状态2,过程sp_xml_preparedocument,第1行[批处理开始第0行]
错误描述是“ XML文档中仅允许一个顶级元素。”信息8179,第16级,状态5,第13行
找不到句柄为0的准备好的语句。消息6607,级别16,状态3,过程sp_xml_removedocument,第1行[批处理开始第0行]
sp_xml_removedocument:为参数1提供的值无效。
我曾尝试将所有XML包装在String str = "abc";
boolean isAlphabet = str.contains("a"); // is true
boolean isNumber = str.contains("1"); // is false
标记中,因为我的印象是我的XML文件具有多个根,我知道这是不允许的。但是文件本身没有。
这是我的SQL查询
<root></root>
这是我的XML文件
DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)
SELECT @XML = BulkColumn
FROM OPENROWSET(BULK 'C:\Users\Slick\desktop\xmlTest.xml', SINGLE_BLOB) AS x;
SELECT *
FROM AdventureWorks2016CTP3.Person.Person
WHERE FirstName = 'John'
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML
SELECT FirstName
FROM OPENXML(@hDoc, 'Person.Person BusinessEntityID="18334" PersonType="IN" NameStyle="0" FirstName="John" MiddleName="C" LastName="Anderson" EmailPromotion="0" rowguid="B3E71FA8-890F-40A5-A36E-01D7CFCAF4F7" ModifiedDate="2014-06-02T00:00:00"')
WITH
(
FirstName [VARCHAR](50) '@FirstName',
BusinessEntityID [VARCHAR](100) '@BusinessEntityID'
)
EXEC sp_xml_removedocument @hDoc
Stackoverflow不允许我在正文中发布整个XML。
我应该从SMSS获取一个SQL事务代码
答案 0 :(得分:1)
您应该使用nodes/value
方法:
SELECT s.c.value('@FirstName', 'NVARCHAR(100)') AS FirstName,
s.c.value('@BusinessEntityID', 'INT') AS BusinessEntityID
FROM @xml.nodes('/Person.Person') s(c);
sp_xml_preparedocument/OPENXML
是解析起源于SQL Server 2005的XML的一种旧方法。
提供的XML并不是格式正确的XML,它缺少根元素,但是SQL Server能够处理演示中提供的XML。