SELECT * 来自存储过程中的 OPENXML returns 空行
SELECT * FROM OPENXML IN STORED PROCEDURE returns empty row
我在存储过程中使用 openxml 函数时遇到问题,如您所见,select 语句 returns 空行.我怀疑 sql 无法读取 xml directories.this 是我第一次使用此功能,所以我不确定这是使用 [=18= 的正确方法] 我正在使用 sql 服务器 2008 r2。这是重现问题的代码。
Declare @hddoc int
Declare @Doc xml
SET @Doc = ' <DataSet>
<tblEmp>
<name>Nazri</name>
<designation>Developer</designation>
</tblEmp>
<tblEmp>
<name>Jibin</name>
<designation>System Analyst</designation>
</tblEmp>
</DataSet>'
EXEC SP_XML_PREPAREDOCUMENT @hddoc OUTPUT, @Doc
SELECT @hddoc
DECLARE @iDoc INT
SET @iDoc = 1
SELECT *
FROM OPENXML(@iDoc,'/Dataset/tblEmp')
WITH ( name varchar(50) '@name',
designation varchar(50) '@designation'
)
问题是所提供的 table 映射表明值应该是属性;但是,在 XML 中,它们是元素。将您的 OPENXML
语句更改为如下所示,它应该 return 预期结果。
SELECT * FROM OPENXML(@iDoc,'/DataSet/tblEmp',2)
WITH ( name varchar(50) 'name',
designation varchar(50) 'designation'
)
基本上这两个更改是指定以元素为中心的映射和更新相对 xpath 以查找元素而不是属性。
将您的查询更改为:
CREATE PROCEDURE AddData
( @data XML)
AS
BEGIN
DECLARE
@handle INT,
@PrepareXmlStatus INT
EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @Data
INSERT INTO tblEmp (name,designation)
SELECT *
FROM OPENXML(@handle,'/DataSet/tblEmp',2)
WITH ( name varchar(50) 'name',
designation varchar(50) 'designation')
EXEC sp_xml_removedocument @handle
END
我在存储过程中使用 openxml 函数时遇到问题,如您所见,select 语句 returns 空行.我怀疑 sql 无法读取 xml directories.this 是我第一次使用此功能,所以我不确定这是使用 [=18= 的正确方法] 我正在使用 sql 服务器 2008 r2。这是重现问题的代码。
Declare @hddoc int
Declare @Doc xml
SET @Doc = ' <DataSet>
<tblEmp>
<name>Nazri</name>
<designation>Developer</designation>
</tblEmp>
<tblEmp>
<name>Jibin</name>
<designation>System Analyst</designation>
</tblEmp>
</DataSet>'
EXEC SP_XML_PREPAREDOCUMENT @hddoc OUTPUT, @Doc
SELECT @hddoc
DECLARE @iDoc INT
SET @iDoc = 1
SELECT *
FROM OPENXML(@iDoc,'/Dataset/tblEmp')
WITH ( name varchar(50) '@name',
designation varchar(50) '@designation'
)
问题是所提供的 table 映射表明值应该是属性;但是,在 XML 中,它们是元素。将您的 OPENXML
语句更改为如下所示,它应该 return 预期结果。
SELECT * FROM OPENXML(@iDoc,'/DataSet/tblEmp',2)
WITH ( name varchar(50) 'name',
designation varchar(50) 'designation'
)
基本上这两个更改是指定以元素为中心的映射和更新相对 xpath 以查找元素而不是属性。
将您的查询更改为:
CREATE PROCEDURE AddData
( @data XML)
AS
BEGIN
DECLARE
@handle INT,
@PrepareXmlStatus INT
EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @Data
INSERT INTO tblEmp (name,designation)
SELECT *
FROM OPENXML(@handle,'/DataSet/tblEmp',2)
WITH ( name varchar(50) 'name',
designation varchar(50) 'designation')
EXEC sp_xml_removedocument @handle
END