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 不能加括号,否则报错,原因目前未知

 

posted @ 2022-01-11 13:36  叨叨的蜗牛  阅读(288)  评论(0)    收藏  举报