当前位置: 代码迷 >> Sql Server >> 游标获取不到XML文件传进去的参数
  详细解决方案

游标获取不到XML文件传进去的参数

热度:87   发布时间:2016-04-24 10:06:03.0
游标获取不到XML文件传进来的参数
这是我写的游标 35行有个叫@DJLSH的参数,是从XML文件获取的。稍后附上错误日志

declare @sql varchar(4000)
declare @tablename  varchar(50)
declare @JG varchar(4000)
declare @XMMC varchar(50)
declare @XH varchar(50)
declare @LXMC varchar(50)
declare @TJXM varchar(50)
declare cursor1 cursor
for 

select tablename,dbliem,comment,LX.dwselfdefine_table_id,dw_name,xm.column_id
from xt_dwselfdefine lx
left join dbo.XT_dwselfdefine_column XM on lx.dwselfdefine_table_id=xm.dwselfdefine_table_id
left join XT_dwselfdefine_column_ckz ck on ck.column_id= xm.column_id
where lx.dwselfdefine_table_id>'2000' and xm.systemcolumn='0'

create table #tempB
(
DJLSH VARCHAR(20) NOT NULL,
XH varchar(50) not null,
LXBH varchar(50) not null,
LXMC Varchar(50) not null,
TJXM Varchar(50) not null,
XMMC varchar(50) not null,
JG VARCHAR(2000)NOT NULL,
CKFW varchar(50) not null,
TS varchar(50) not null,
XM VARCHAR(50) NOT NULL,
DW varchar(50) not null
)
open cursor1
fetch next from cursor1 into @tablename,@JG,@XMMC,@XH,@LXMC,@TJXM
while(@@fetch_status=0)
begin
set @sql='select treat_id  as DJLSH,'''+@XH+''', '''+@XH+''','''+@LXMC+''', '''+@TJXM+''', '''+@XMMC+''',  JG= '+@JG+' , '' '','' '', XM=tianxr,'''' from '+ @tablename+' '+'where treat_id='''+@DJLSH+''''+'and '+@JG+' not like '''' '
insert into #tempB exec(@Sql)
fetch next from cursor1 into @tablename,@JG,@XMMC,@XH,@LXMC,@TJXM
end

close cursor1
deallocate cursor1

select DJLSH,XH,LXBH,LXMC,TJXM,XMMC,JG,
isnull(CKZ.biaoqsm,'') as CKFW,
case 
when lx.dwselfdefine_table_id='2028' then ''
when convert(float,JG)>convert(float,cankz_max) then '↑' 
when convert(float,JG)<convert(float,cankz_min) then '↓'
else '' end TS,
XM as JCYS,
isnull(ckz.cankz_unit,'') as DW 
from #tempB as b
LEFT JOIN XT_dwselfdefine_column_ckz CKZ ON CKZ.COLUMN_ID=b.TJXM
left join xt_dwselfdefine lx on lx.dwselfdefine_table_id=b.lxbh
left join XT_dwselfdefine_column xm on xm.column_id=b.tjxm
order by lx.shunxh,xm.shunxh
drop table #tempB

------解决方案--------------------
传值之前先给treat_id赋个初值

declare @DJLSH int 
select @DJLSH=isnull(@DJLSH,0)
------解决方案--------------------
引用:
这是SQL Profiler跟踪出来的语句

手工复制粘贴到SSMS里执行有无问题?
把其中的37行改为如下试试.

set @sql=''select treat_id as DJLSH,''''''+@XH+'''''', ''''''+@XH+'''''',''''''+@LXMC+'''''', ''''''+@TJXM+'''''', ''''''+@XMMC+'''''',  JG= ''+@JG+'' , '''' '''','''' '''', XM=tianxr,'''''''' from ''+ @tablename+'' ''+''where treat_id=''''''+rtrim(@DJLSH)+''''''''+''  and ''+@JG+'' not like '''''''' ''
  相关解决方案