在SQL Server中将varchar值转换为int数据类型时,转换失败
我有个问题。关于在SQLServer中将数据从XML插入表,我有两个相同的代码 我的第一个代码:在SQL Server中将varchar值转换为int数据类型时,转换失败,sql,sql-server,xml,Sql,Sql Server,Xml,我有个问题。关于在SQLServer中将数据从XML插入表,我有两个相同的代码 我的第一个代码: declare @nDoc int, @cXML xml select @cXML = '<root><rekening NomorCIF=''123'' NomorRek=''123456789'' StatusRek=''1'' MataUang=''IDR'' Saldo=''1000''></rekening></root>'
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
声明
@nDoc int,
@cXML
选择@cXML=''
exec sp_xml_preparedocument@nDoc output@cXML
插入到[50732reking_TM]中,从OPENXML(@nDoc,'root/rekening',1)中选择*并使用(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
声明
@nDoc int,
@cXML,
@查询nvarchar(最大值)
选择@cXML=''
exec sp_xml_preparedocument@nDoc output@cXML
set@query='插入[50732reking_TM]从OPENXML('+@nDoc+','root/rekening',1)中选择*,使用(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”从OPENXML(”转换为[50732reking_TM]select*到数据类型int时,转换失败 为什么第二个代码包含错误?我需要它,但我不知道如何修复它
谢谢您必须将@nDoc int参数转换为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 @nDoc
声明
@nDoc int,
@cXML,
@查询nvarchar(最大值)
选择@cXML=''
exec sp_xml_preparedocument@nDoc output@cXML
设置@query='插入[50732reking_TM]从OPENXML中选择*('+convert(varchar,@nDoc)+','root/rekening',1)和(NomorCIF varchar(30),NomorRek varchar(30),StatusRek varchar(30),MataUang varchar(30),Saldo varchar(30))'
exec sp_executesql@query
exec sp_xml_removedocument@nDoc
必须将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
声明
@nDoc int,
@cXML,
@查询nvarchar(最大值)
选择@cXML=''
exec sp_xml_preparedocument@nDoc output@cXML
设置@query=N'insert到[50732reking_TM]中,从OPENXML(@nDoc,“root/rekening”,1)中选择*,使用(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
嗯,@nDoc
是一个INT
,所以你不能在不转换它的情况下用字符串连接它。或者将@nDoc
作为参数添加到动态代码中只要将它改为从OPENXML('+cast(@nDoc as varchar)+'