我正在编写一个采用Xml的存储过程,但解析Xml的部分工作不正常。这是sproc:
CREATE PROCEDURE [dbo].[SprocName]
@Xml TEXT
AS
DECLARE @XmlHandle INT
DECLARE @Table TABLE
(
Id INT
)
-- Process the xml for use
EXEC sp_xml_preparedocument @XmlHandle OUTPUT, @Xml
INSERT @Table
SELECT
Id
FROM
OPENXML(@XmlHandle, 'Ids', 2)
WITH
(
Id INT
)
SELECT * FROM @Table
EXEC sp_xml_removedocument @XmlHandle
调用代码和结果:
我似乎无法弄清问题是什么。我期待1和2将在临时表中,但正如你所看到的,我只有1.现在,我呼吁StackOverflow的力量。用你的智慧祝福我!
答案 0 :(得分:2)
如果可能的话,请避免使用OPENXML - 它已经过时了,它很笨拙,它吞噬了内存...
在SQL Server 2005及更高版本中使用内置的本机XQuery支持 - 通过它,您可以非常轻松地执行此类操作:
DECLARE @Table TABLE (Id INT)
DECLARE @Input XML = '<Ids><Id>1</Id><Id>2</Id></Ids>'
INSERT INTO @Table(Id)
SELECT
IdNode.value('(.)[1]', 'int')
FROM
@input.nodes('/Ids/Id') AS IdTbl(IdNode)
SELECT * FROM @Table
这会为1, 2
提供@table
作为输出。无需致电sp_xml_preparedocument
和sp_xml_removedocument
- 只需运行即可!