我有个问题。关于在Server中将数据从XML插入到表中,我有两个相同的代码。
我的第一个代码:
declare
@nDoc int,
@cXML xml
select @cXML = '<root><rekening NomorCIF=''123'' NomorRek=''123456789'' StatusRek=''1'' MataUang=''IDR'' Saldo=''1000''></rekening></root>'
exec sp_xml_preparedocument @nDoc output, @cXML
insert into [50732Rekening_TM] select * from OPENXML (@nDoc, 'root/rekening', 1) with (NomorCIF varchar(30), NomorRek varchar(30), StatusRek varchar(30), MataUang varchar(30), Saldo varchar(30))
exec sp_xml_removedocument @nDoc这段代码运行平稳。
但是这段代码返回一个错误
declare
@nDoc int,
@cXML xml,
@query nvarchar(max)
select @cXML ='<root><rekening NomorCIF=''123'' NomorRek=''123456789'' StatusRek=''1'' MataUang=''IDR'' Saldo=''1000''></rekening></root>'
exec sp_xml_preparedocument @nDoc output, @cXML
set @query = 'insert into [50732Rekening_TM] select * from OPENXML ('+@nDoc+', ''root/rekening'', 1) with (NomorCIF varchar(30), NomorRek varchar(30), StatusRek varchar(30), MataUang varchar(30), Saldo varchar(30))'
exec sp_executesql @query
exec sp_xml_removedocument @nDoc错误是
Msg 245,第16级,状态1,第15线 当将varchar值'insert转换为50732Rekening_TM select *从OPENXML (‘到数据类型int )时,转换失败。
为什么第二个代码包含一个错误?我需要它,但我不知道怎么修理它。
谢谢
发布于 2014-06-02 17:15:50
必须将XML文档的句柄作为参数传递。
declare
@nDoc int,
@cXML xml,
@query nvarchar(max)
select @cXML ='<root><rekening NomorCIF=''123'' NomorRek=''123456789'' StatusRek=''1'' MataUang=''IDR'' Saldo=''1000''></rekening></root>'
exec sp_xml_preparedocument @nDoc output, @cXML
set @query = N'insert into [50732Rekening_TM] select * from OPENXML (@nDoc, ''root/rekening'', 1) with (NomorCIF varchar(30), NomorRek varchar(30), StatusRek varchar(30), MataUang varchar(30), Saldo varchar(30))'
exec sp_executesql @query, N'@nDoc int', @nDoc = @nDoc
exec sp_xml_removedocument @nDoc发布于 2014-06-02 17:14:49
您必须将@nDoc参数转换为string,因为您不能将int值与string @query变量连接起来。
declare
@nDoc int,
@cXML xml,
@query nvarchar(max)
select @cXML ='<root><rekening NomorCIF=''123'' NomorRek=''123456789'' StatusRek=''1'' MataUang=''IDR'' Saldo=''1000''></rekening></root>'
exec sp_xml_preparedocument @nDoc output, @cXML
set @query = 'insert into [50732Rekening_TM] select * from OPENXML ('+convert(varchar,@nDoc)+', ''root/rekening'', 1) with (NomorCIF varchar(30), NomorRek varchar(30), StatusRek varchar(30), MataUang varchar(30), Saldo varchar(30))'
exec sp_executesql @query
exec sp_xml_removedocument @nDochttps://stackoverflow.com/questions/23999705
复制相似问题