首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将varchar值转换为Server中的数据类型int时,转换失败

将varchar值转换为Server中的数据类型int时,转换失败
EN

Stack Overflow用户
提问于 2014-06-02 17:00:26
回答 2查看 2.3K关注 0票数 0

我有个问题。关于在Server中将数据从XML插入到表中,我有两个相同的代码。

我的第一个代码:

代码语言:javascript
复制
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

这段代码运行平稳。

但是这段代码返回一个错误

代码语言:javascript
复制
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 )时,转换失败。

为什么第二个代码包含一个错误?我需要它,但我不知道怎么修理它。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-06-02 17:15:50

必须将XML文档的句柄作为参数传递。

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2014-06-02 17:14:49

您必须将@nDoc参数转换为string,因为您不能将int值与string @query变量连接起来。

代码语言:javascript
复制
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 @nDoc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23999705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档