游标中不能直接执行更新操作?

xjjdanran 2006-07-21 09:41:42
DECLARE nextcorder CURSOR FOR
……
OPEN nextcorder
FETCH NEXT FROM nextcorder INTO
……
WHILE @@FETCH_STATUS = 0
BEGIN
--从游标中读出变量,更新其它表
UPDATE ………………
END
CLOSE nextcorder
DEALLOCATE nextCorder

如上所述,BEGIN END块中的语句执行之后没有任何效果,但把它们直接在查询分析器中执行确有效,
这是怎么回事,该如何解决呢?谢谢!
...全文
409 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellowork 2006-07-21
  • 打赏
  • 举报
回复
既然IF @execType = 'signByOther'不满足,楼主是怎么print @fileSId的呢?还把@execType 恢复为10个长度,看看能不能print @fileSId.
xjjdanran 2006-07-21
  • 打赏
  • 举报
回复
可能是记错了吧,既然解决了就结贴,谢谢playwarcraft(三角褲叉叉的頂點)
xjjdanran 2006-07-21
  • 打赏
  • 举报
回复
怎么当时我在UPDATE 之后,PRINT 'a' ,却能输出a 呢?
playwarcraft 2006-07-21
  • 打赏
  • 举报
回复
會自動截斷啊~~
playwarcraft 2006-07-21
  • 打赏
  • 举报
回复
DECLARE @execType nvarchar(10)
SET @execType = 'signByOther'
print @execType
-------------
結果signByOthe
所以讓你print一下,就可以看出錯誤了
xjjdanran 2006-07-21
  • 打赏
  • 举报
回复
谢谢楼上几位,DECLARE @execType nvarchar(10),变量的长度不够, 'signByOther'是11,可这样赋值怎么不报错?
playwarcraft 2006-07-21
  • 打赏
  • 举报
回复
DECLARE @execType nvarchar(10)
SET @execType = 'signByOther'
IF @execType = 'signByOther'
UPDATE T_OAFileList SET F_tacheStatus = '已阅', F_signDate = GETDATE(), F_signIdea = ' 由代签人签批'
WHERE F_fileSId = 259

----------
nvarchar(10)---長度不夠
xjjdanran 2006-07-21
  • 打赏
  • 举报
回复
我明白了,应该是变量的范围不够,但怎么也不报错呢?
playwarcraft 2006-07-21
  • 打赏
  • 举报
回复
......
你加print debug下,把那些變量都print出來看看,是否滿足條件.
語句應該沒問題吧
xjjdanran 2006-07-21
  • 打赏
  • 举报
回复
hellowork(一两清风)
条件是满足的,刚刚做局部的调试又发现一个比较奇怪的现象:

DECLARE @execType nvarchar(10)
SET @execType = 'signByOther'
IF @execType = 'signByOther'
UPDATE T_OAFileList SET F_tacheStatus = '已阅', F_signDate = GETDATE(), F_signIdea = ' 由代签人签批'
WHERE F_fileSId = 259

执行上述代码,还是只是提示“命令已成功完成”,但更新无新;但直接运行UPDATE语句,却是有效的,难道是我数据库出问题了?
xjjdanran 2006-07-21
  • 打赏
  • 举报
回复
还有个现象,就是在游标中执行UPDATE之后,没有返回影响了多少行的提示,只是提示“命令已成功完成”
hellowork 2006-07-21
  • 打赏
  • 举报
回复
请楼主在IF @execType = 'signByOther'的语句块中print @fileSId,看看F_signIdea是否有@signIdea变量显示的这个值.更新既然没有错误,估计是更新的条件不满足.
xjjdanran 2006-07-21
  • 打赏
  • 举报
回复
所以,UPDATE应该是执行了的,可就失效一样,但同样赋值之后,在外面单独执行却能更新,是不是在游标中操作,还得再做其它的设置?
xjjdanran 2006-07-21
  • 打赏
  • 举报
回复
我在UPDATE之后,PRINT 'A',能办出A
playwarcraft 2006-07-21
  • 打赏
  • 举报
回复
IF @execType = 'signByOther'
UPDATE T_OAFileList
SET F_tacheStatus = '已阅', F_signDate = GETDATE(), F_signIdea = @signIdea + ' 由代签人签批'
WHERE F_fileSId = @fileSId

----------
update語句好像沒什麼問題,估計if出了問題?
你可以在if之前,加個print @execType看看...是不是有這個值
xjjdanran 2006-07-21
  • 打赏
  • 举报
回复
郁闷…………
xjjdanran 2006-07-21
  • 打赏
  • 举报
回复
可执行之后,达不到预期的效果啊
playwarcraft 2006-07-21
  • 打赏
  • 举报
回复
看看語句好像沒什麼問題嘛
xjjdanran 2006-07-21
  • 打赏
  • 举报
回复
现在的问题是,打开游标,依次取出数据,执行到
IF @execType = 'signByOther'
BEGIN
UPDATE T_OAFileList SET F_tacheStatus = '已阅', F_signDate = GETDATE(), F_signIdea = @signIdea + ' 由代签人签批'
WHERE F_fileSId = @fileSId
INSERT INTO T_OAFileList (F_fileId, F_toPerSid, F_tacheOrder, F_tacheType, F_tacheStatus, F_arriveDate)
SELECT F_fileId, @repPerSId, F_tacheOrder, F_tacheType, '到达', GETDATE()
FROM T_OAfileList
WHERE F_fileSId = @fileSId
END

里面的UPDATE 和INSERT执行了都没效果,但如果将它们拷到查询分析器中,并给变量赋同样的值,直接运行却有效
playwarcraft 2006-07-21
  • 打赏
  • 举报
回复
update語句帖出來看看
加载更多回复(5)
内容概要:本文围绕不确定环境下的多式联运路径优化问题展开研究,提出并实现了基于AFO算法、遗传算法(GA)和粒子群优化算法(PSO)的三种智能优化方法,并借助Matlab平台完成算法编程与仿真。研究构建了考虑时间、成本、转运风险等多重不确定因素的路径优化模型,系统比较了AFO、GA、PSO三种算法在收敛速度、全局寻优能力和稳定性方面的表现,同时引入Matlab自带的全局优化搜索器作为基准对照,深入分析各算法在复杂物流网络的适用边界与性能差异。研究表明,AFO算法在解决此类组合优化问题时展现出更快的收敛效率和更强的局部规避能力。; 适合人群:具备一定Matlab编程基础与运筹优化知识,从事物流工程、交通运输规划、智能算法开发等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多式联运、综合货运网络的路径决策支持系统构建;②为不确定性条件下复杂路径规划问题提供智能算法选型依据与技术实现方案;③支持科研人员复现主流优化算法并开展横向性能对比实验,推动算法改进与实际落地。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析算法实现流程,重点理解目标函数设计、约束条件处理及参数敏感性分析部分,可通过调整问题规模与算法参数进行对比实验,进一步拓展至动态路径规划或大规模网络优化等延伸场景。

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧