+ -
当前位置:首页 → 问答吧 → 动态执行生成的openxml语句出错

动态执行生成的openxml语句出错

时间:2011-12-26

来源:互联网

declare @xmldata xml
declare @idoc int
set @xmldata=
'<root>
 <LineInfo>  
 <LineData C0="1" C1="2" Action="New"/>
 <LineData C0="1" C1="2" Action="New"/> 
   

 </LineInfo>

</root> '
 EXEC sp_xml_preparedocument @idoc OUTPUT, @xmldata

declare @sql varchar(200)
 --SELECT * FROM OPENXML (@idoc, '/root/LineInfo/LineData',1) with (C0 varchar(20),C1 varchar(40))
SET @sql= 'SELECT * FROM OPENXML ('+convert(varchar(10),@idoc)+','''+ '/root/LineInfo/LineData'+''',1) with(C0 varchar(20) ,C1 varchar(40) )'
exec(@sql) 
--print ( @sql)

exec sp_xml_removedocument @idoc


执行后出现如下错误:
关键字 'with' 附近有语法错误。如果此语句是公用表表达式或 xmlnamespaces 子句,那么前一个语句必须以分号结尾。


最终生成的sql语句是:
SELECT * FROM OPENXML (263,'/root/LineInfo/LineData',1) with(C0 varchar(20) ,C1 varchar(40) )

这个是什么问题啊? 有with的不能变成一行吗?查了百度说是要在with前面加;但和我这个应用不一样啊.
有没有碰到过这种问题的.求指教

作者: sz_jeff_zhao   发布时间: 2011-12-26

SET @sql= 'SELECT * FROM OPENXML ('+convert(varchar(10),@idoc)+','''+ '/root/LineInfo/LineData'+''',1) with(C0 varchar(20) ,C1 varchar(40) )'

把这儿的 with 改成 values 试试.

作者: qianjin036a   发布时间: 2011-12-26

不行. 这里用的是openxml语句呀.

作者: sz_jeff_zhao   发布时间: 2011-12-26