sqlserver 存储过程游标,select赋值等使用遇到得问题
##查看存储过程:
CREATE PROCEDURE [dbo].[updatenoViolationDays] AS BEGIN DECLARE @line NVARCHAR(50) DECLARE @rq NVARCHAR(50) DECLARE @noViolationDays NVARCHAR(50) DECLARE cur CURSOR for (select lineCode from bigData.dbo.safe_driving_basic_information) OPEN cur FETCH NEXT FROM cur INTO @line WHILE @@fetch_status = 0 --判断是否还有数据 BEGIN select @rq = max(tmp.rq), @noViolationDays = DATEDIFF(DAY, max(tmp.rq), CONVERT(varchar(10), GETDATE(), 120)) from (select vn_date rq, line_code line from joffice1.dbo.violation_record union all select kaoheDate rq, lineCode line from joffice1.dbo.Jckrichang_Jc) tmp where tmp.line = @line group by tmp.line -- print @line -- print @rq -- print @noViolationDays --更新这条线路得0违章天数和日期 UPDATE bigData.dbo.safe_driving_basic_information SET noViolationDate = @rq, noViolationDays=@noViolationDays WHERE lineCode = @line FETCH NEXT FROM cur INTO @line --这里一定要写取下一条数据 END CLOSE cur --关闭游标 DEALLOCATE cur end go
##游标里面select赋值,select的每个字段,都要声明变量接收,否则报错,例如:
[ 错误 ] select @classname=classname,@chargeteacher from classes where classid=@classid
[ 错误 ] select @classname=classname,name from classes where classid=@classid
[ 正确 ] select @classname=classname,@chargeteacher=chargeteacher from classes where classid=@classid
##另外,
@@fetch_status = 0 不能加括号,否则报错,原因目前未知

浙公网安备 33010602011771号