Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 向sp_xml_preparedocument传递值时出错_Sql Server_Xml - Fatal编程技术网

Sql server 向sp_xml_preparedocument传递值时出错

Sql server 向sp_xml_preparedocument传递值时出错,sql-server,xml,Sql Server,Xml,声明@xml SET @xml = N'"<?xml version=\"1.0\" encoding=\"utf-16\"?><NominalIds><Id>6416</Id><Id>9</Id><Id>6405</Id><Id>6400</Id><Id>6404</Id><Id>6407</Id><Id>0<

声明@xml

SET @xml = N'"<?xml version=\"1.0\" encoding=\"utf-16\"?><NominalIds><Id>6416</Id><Id>9</Id><Id>6405</Id><Id>6400</Id><Id>6404</Id><Id>6407</Id><Id>0</Id></NominalIds>"';
DECLARE @idoc INT

EXEC sp_xml_preparedocument @idoc OUTPUT, @xml
SET@xml=N''6416964056400640464070';
声明@idoc INT
EXEC sp_xml_preparedocument@idoc OUTPUT,@xml
错误是

XML解析:第1行,字符7,text/xmldecl不在输入的开头

DECLARE@xml;
SET@xml=N'6416964056400640464070';
声明@idoc INT
EXEC sp_xml_preparedocument@idoc OUTPUT,@xml
声明@xml;
SET@xml=N'6416964056400640464070';
声明@idoc INT
EXEC sp_xml_preparedocument@idoc OUTPUT,@xml

您的xml字符串格式不正确

删除开头和结尾的双引号,删除
\
之前的

DECLARE@xmlxml=N'6416964056400640464070';
声明@idoc INT
EXEC sp_xml_preparedocument@idoc OUTPUT,@xml
---做事
EXEC sp_xml_removedocument@idoc

您的xml字符串格式不正确

删除开头和结尾的双引号,删除
\
之前的

DECLARE@xmlxml=N'6416964056400640464070';
声明@idoc INT
EXEC sp_xml_preparedocument@idoc OUTPUT,@xml
---做事
EXEC sp_xml_removedocument@idoc

您已经被告知,
\”
是错误的

但无论如何,你应该走另一条路


来自OPENXML的
以及用于准备和删除文档的相应SP已过时,不应再使用(存在极少数例外情况)。而是使用适当的方法

对于您的示例,这将是一种方法:

DECLARE @xml XML = 
N'<?xml version="1.0" encoding="utf-16"?><NominalIds><Id>6416</Id><Id>9</Id><Id>6405</Id><Id>6400</Id><Id>6404</Id><Id>6407</Id><Id>0</Id></NominalIds>';

SELECT id.value(N'(text())[1]',N'int')
FROM @xml.nodes(N'/NominalIds/Id') AS A(id)

您已经被告知,
\”
是错误的

但无论如何,你应该走另一条路


来自OPENXML的
以及用于准备和删除文档的相应SP已过时,不应再使用(存在极少数例外情况)。而是使用适当的方法

对于您的示例,这将是一种方法:

DECLARE @xml XML = 
N'<?xml version="1.0" encoding="utf-16"?><NominalIds><Id>6416</Id><Id>9</Id><Id>6405</Id><Id>6400</Id><Id>6404</Id><Id>6407</Id><Id>0</Id></NominalIds>';

SELECT id.value(N'(text())[1]',N'int')
FROM @xml.nodes(N'/NominalIds/Id') AS A(id)

我发现了一些与此相关的问题,但没有一个建议对我有效,这就是我提出它的原因。那是什么
开始和结束时在那里做什么?摆脱它。T-SQL中的字符串仅用单引号括起来。它返回XML解析:第1行,字符15,应为字符串文本。但是如果我用这个来纠正xml字符串-'6416964056400640464070',那么它就可以工作了。我找到了一些与此相关的查询,但没有一个建议对我有效,这就是我提出它的原因。那是什么
开始和结束时在那里做什么?摆脱它。T-SQL中的字符串仅用单引号括起来。它返回XML解析:第1行,字符15,应为字符串文本。但如果我通过以下方式更正xml字符串-'6416964056400640464070',那么它就可以工作了。对我来说是有效的。感谢
来自OPENXML
以及相应的SPs来准备和删除已过时的文档…感谢@Shnugo,我正在使用为我工作的
OPENXML
xquery
。感谢来自OPENXML的
以及相应的SPs来准备和删除已过时的文档…感谢@Shnugo,我正在使用来自openxml的
openxml
xquery
以及相应的SPs来准备和删除过期的文档…
来自openxml的
以及相应的SPs来准备和删除过期的文档。。。
DECLARE @xml XML = 
N'<?xml version="1.0" encoding="utf-16"?><NominalIds><Id>6416</Id><Id>9</Id><Id>6405</Id><Id>6400</Id><Id>6404</Id><Id>6407</Id><Id>0</Id></NominalIds>';

SELECT id.value(N'(text())[1]',N'int')
FROM @xml.nodes(N'/NominalIds/Id') AS A(id)
6416
9
6405
6400
6404
6407
0