Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 光标练习不起作用_Sql_Sql Server 2008_Cursor - Fatal编程技术网

Sql 光标练习不起作用

Sql 光标练习不起作用,sql,sql-server-2008,cursor,Sql,Sql Server 2008,Cursor,你知道为什么这段代码在Sql Server中不起作用吗 CREATE PROCEDURE sum_salaries(OUT sum INTEGER) LANGUAGE SQL BEGIN DECLARE p_sum INTEGER; DECLARE p_sal INTEGER; DECLARE c CURSOR FOR SELECT SALARY FROM EMPLOYEE; DECLARE SQLSTATE CHAR(5) DEFAULT '00000

你知道为什么这段代码在Sql Server中不起作用吗

CREATE PROCEDURE sum_salaries(OUT sum INTEGER) 
  LANGUAGE SQL
  BEGIN
    DECLARE p_sum INTEGER;
    DECLARE p_sal INTEGER;
    DECLARE c CURSOR FOR SELECT SALARY FROM EMPLOYEE;
    DECLARE SQLSTATE CHAR(5) DEFAULT '00000';

     SET p_sum = 0;

     OPEN c;

     FETCH FROM c INTO p_sal;

     WHILE(SQLSTATE = '00000') DO
        SET p_sum = p_sum + p_sal;
        FETCH FROM c INTO p_sal; 
     END WHILE;

     CLOSE c;

     SET sum = p_sum;

  END%
它给出了各种各样的错误:

Msg 102,15级,状态1,程序汇总工资,第3行不正确 “OUT”附近的语法。Msg 155,第15级,状态2,程序汇总工资, 第6行“整数”不是可识别的游标选项。味精155,第15级, 状态2,过程总和,第7行“整数”未被识别 光标选项。Msg 155,第15级,状态2,程序汇总工资, 第9行“CHAR”不是可识别的游标选项。味精102,第15级, 状态1,程序汇总,第15行,语法不正确 “p_sal”。Msg 102,15级,状态1,程序汇总工资,第17行 “DO”附近的语法不正确。Msg 102,15级,状态1,程序 工资总额,第19行“p_sal”附近的语法不正确。味精102,水平 15,状态1,程序汇总,第24行,语法不正确 “=”

或者,如果你能给我指一篇教使用游标的文章/网站,那也太好了。此示例取自:


提前非常感谢

这样做不需要光标

create procedure sum_salaries
(
    @sum int output
) 
as
begin
    select @sum = sum(salary) from employee
end
但如果您想使用游标,请尝试

create procedure sum_salaries
(
    @sum int output
) 
as
begin
    declare @p_sum int, @p_sal int

    declare c cursor for
        select salary from employee

    set @p_sum = 0

    open c

    fetch from c into @p_sal

    while @@fetch_status = 0
    begin
        set @p_sum = @p_sum + @p_sal
        fetch from c into @p_sal
    end

    close c
    deallocate c

    set @sum = @p_sum
end

这不是T-SQL。此代码不是为以下(DB2)文档的SQL Server.SqlServer版本设计的: