DECLARE nextcorder CURSOR FOR
……
OPEN nextcorder
FETCH NEXT FROM nextcorder INTO
……
WHILE @@FETCH_STATUS = 0
BEGIN
--从游标中读出变量,更新其它表
UPDATE ………………
END
CLOSE nextcorder
DEALLOCATE nextCorder如上所述,BEGIN END块中的语句执行之后没有任何效果,但把它们直接在查询分析器中执行确有效,
这是怎么回事,该如何解决呢?谢谢!
……
OPEN nextcorder
FETCH NEXT FROM nextcorder INTO
……
WHILE @@FETCH_STATUS = 0
BEGIN
--从游标中读出变量,更新其它表
UPDATE ………………
END
CLOSE nextcorder
DEALLOCATE nextCorder如上所述,BEGIN END块中的语句执行之后没有任何效果,但把它们直接在查询分析器中执行确有效,
这是怎么回事,该如何解决呢?谢谢!
DECLARE @fileSId INT
DECLARE @perSId INT
DECLARE @repPerSId INT
DECLARE @fileOrde INT
DECLARE @execType nvarchar(10)
DECLARE @perStatus nvarchar(10)
DECLARE @signIdea nvarchar(50)
DECLARE nextcorder CURSOR FOR
--定义游标,获取当前数据表中,所有离职、休假人员未签批的文件信息,设置成‘等待’状态的除外
SELECT T_OAfileList.F_fileId, T_OAfileList.F_fileSid, T_OAfileList.F_toPerSid, T_OAfileList.F_tacheorder,
VI_OAfileExecType.F_type AS F_perStatus, VI_OAfileExecType.F_execType, VI_OAfileExecType.F_repPerSid AS F_repPerSId
FROM T_OAfileList INNER JOIN
VI_OAfileExecType ON
VI_OAfileExecType.F_perSid = T_OAfileList.F_toPerSid
WHERE (T_OAfileList.F_tacheStatus = '到达') AND VI_OAfileExecType.F_type IN ('休假', '离职')
AND VI_OAfileExecType.F_execType <> 'wait'OPEN nextcorder
FETCH NEXT FROM nextcorder
INTO @fileId, @fileSId, @perSId, @fileOrde, @perStatus, @execType, @repPerSId
WHILE @@FETCH_STATUS = 0
BEGIN
--存在离休假的设置
SET @signIdea = CASE @perStatus WHEN '休假' THEN '休假中……' WHEN '离职' THEN '已离职' END
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
ELSE
BEGIN
IF @execType = 'autoSign'
BEGIN
UPDATE T_OAFileList SET F_tacheStatus = '已阅', F_signDate = GETDATE(), F_signIdea = @signIdea +' 自动签批'
WHERE F_fileSId = @fileSId
END
END
FETCH NEXT FROM nextcorder
INTO @fileId, @fileSId, @perSId, @fileOrde, @perStatus, @execType, @repPerSId
ENDCLOSE nextcorder
DEALLOCATE nextCorder写的比较乱的,请大家帮忙看看
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执行了都没效果,但如果将它们拷到查询分析器中,并给变量赋同样的值,直接运行却有效
UPDATE T_OAFileList
SET F_tacheStatus = '已阅', F_signDate = GETDATE(), F_signIdea = @signIdea + ' 由代签人签批'
WHERE F_fileSId = @fileSId ----------
update語句好像沒什麼問題,估計if出了問題?
你可以在if之前,加個print @execType看看...是不是有這個值
条件是满足的,刚刚做局部的调试又发现一个比较奇怪的现象: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语句,却是有效的,难道是我数据库出问题了?
你加print debug下,把那些變量都print出來看看,是否滿足條件.
語句應該沒問題吧
SET @execType = 'signByOther'
IF @execType = 'signByOther'
UPDATE T_OAFileList SET F_tacheStatus = '已阅', F_signDate = GETDATE(), F_signIdea = ' 由代签人签批'
WHERE F_fileSId = 259----------
nvarchar(10)---長度不夠
SET @execType = 'signByOther'
print @execType
-------------
結果signByOthe
所以讓你print一下,就可以看出錯誤了
您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
一方面,他们会为您的问题提供满意的答案,
另一方面,也邀请您为他们投上宝贵的选票。2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
中抽取3名幸运者,赠送由IBM提供的精美礼品一份!此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
http://www.bestdba.cn/match_discussion3.aspx?pointid=352&pointid2=1&pointid3=5&pcount=stc非常感谢您对本次活动的支持!
--------------------------------------------------------------