日期:2014-05-18  浏览次数:20570 次

游标的用法问题
下面的sql语句语法有问题
错误提示是
消息 156,级别 15,状态 1,第 1 行
关键字 'DECLARE' 附近有语法错误。
消息 102,级别 15,状态 1,第 3 行
')' 附近有语法错误。
消息 102,级别 15,状态 1,第 5 行
')' 附近有语法错误。

请问应该怎么写呢!
update t_personnel_department set cSupcode=(DECLARE youbiao CURSOR FOR select c.cdepcode from t_personnel_department a
 left join sheet1$ b on a.cdepname=b.部门名称 left join (select cdepcode,cdepname from t_personnel_department
 ) c on b.上级部门名称=c.cdepname OPEN youbiao FETCH NEXT FROM youbiao) where cdepname(DECLARE youbiao1 CURSOR FOR select a.cdepname from t_personnel_department a
 left join sheet1$ b on a.cdepname=b.部门名称 left join (select cdepcode,cdepname from t_personnel_department
 ) c on b.上级部门名称=c.cdepname OPEN youbiao1 FETCH NEXT FROM youbiao1)

------解决方案--------------------
纯属乱来。。。
楼主看一下游标的用法。。

在联机帮助—输入 declare cursor—有列子
------解决方案--------------------
[code=--声明游标
--声明部门编码,部门名称两个变量,用于存放游标取出来的数据
DECLARE @cdepcode varchar(20)
DECLARE @cdepname varchar(40)
DECLARE youbiao CURSOR FOR 
select c.cdepcode,a.cdepname from t_personnel_department a 
left join sheet1$ b on a.cdepname=b.部门名称 
left join (select cdepcode,cdepname from t_personnel_department) c on b.上级部门名称=c.cdepname 
--打开游标
OPEN youbiao 
FETCH NEXT FROM youbiao into @cdepcode,@cdepname
--执行成功
while @@fetch_status=0
begin
update t_personnel_department 
set cSupcode=@cdepcode
where cdepname=@cdepname
FETCH NEXT FROM youbiao into @cdepcode,@cdepname
end
--关闭游标
close youbiao
--销毁游标
deallocate youbiao
][/code]
------解决方案--------------------
晕死,定义总得在使用前吧