没错,我用查询分析器执行了一下过程,就出现了上面的错误,存储过程如下:
CREATE PROCEDURE sp_column_first
@cata_id int,
@ret_img_result varchar(50) outputASSET NOCOUNT ON
declare @auto_id int, 
             @ret_img varchar(50)DECLARE folder_img_cursor CURSOR FOR 
select top 8 auto_id from tbl_auto where auto_id in(
select auto_id from tbl_auto_cata where cata_id = @cata_id
) order by auto_date descOPEN folder_img_cursorset @ret_img = ''
set @ret_img_result = ''
FETCH NEXT FROM folder_img_cursor
INTO @auto_id
WHILE @@FETCH_STATUS = 0
  BEGIN
    IF exists(SELECT auto_id FROM tbl_img WHERE auto_id = @auto_id)
      SET @ret_img =  'a'
        ELSE 
          SET @ret_img = '0'
     SET @ret_img_result = @ret_img_result + @ret_img
     FETCH NEXT FROM folder_img_cursor
      INTO @auto_id
   ENDRETURN @ret_img_resultCLOSE folder_img_cursor
DEALLOCATE folder_img_cursor
GO注:@ret_img =  'a' 只是个试验,这个参数一定要字符型的才行。

解决方案 »

  1.   

    CREATE PROCEDURE sp_column_first
    @cata_id int,
    @ret_img_result varchar(50) outputASSET NOCOUNT ON
    declare @auto_id int, 
                 @ret_img varchar(50)DECLARE folder_img_cursor CURSOR FOR 
    select top 8 auto_id from tbl_auto where auto_id in(
    select auto_id from tbl_auto_cata where cata_id = @cata_id
    ) order by auto_date descOPEN folder_img_cursorset @ret_img = ''
    set @ret_img_result = ''
    FETCH NEXT FROM folder_img_cursor
    INTO @auto_id
    WHILE @@FETCH_STATUS = 0
      BEGIN
        IF exists(SELECT auto_id FROM tbl_img WHERE auto_id = @auto_id)
          SET @ret_img =  'a'
            ELSE 
              SET @ret_img = '0'
         SET @ret_img_result = @ret_img_result + cast(@ret_img as varchar(10))
         FETCH NEXT FROM folder_img_cursor
          INTO @auto_id
       ENDRETURN @ret_img_resultCLOSE folder_img_cursor
    DEALLOCATE folder_img_cursor
      

  2.   

    --去掉返回值的一句.CREATE PROCEDURE sp_column_first
    @cata_id int,
    @ret_img_result varchar(50) outputASSET NOCOUNT ON
    declare @auto_id int, 
                 @ret_img varchar(50)DECLARE folder_img_cursor CURSOR FOR 
    select top 8 auto_id from tbl_auto where auto_id in(
    select auto_id from tbl_auto_cata where cata_id = @cata_id
    ) order by auto_date descOPEN folder_img_cursorset @ret_img = ''
    set @ret_img_result = ''
    FETCH NEXT FROM folder_img_cursor
    INTO @auto_id
    WHILE @@FETCH_STATUS = 0
      BEGIN
        IF exists(SELECT auto_id FROM tbl_img WHERE auto_id = @auto_id)
          SET @ret_img =  'a'
            ELSE 
              SET @ret_img = '0'
         SET @ret_img_result = @ret_img_result + @ret_img
         FETCH NEXT FROM folder_img_cursor
          INTO @auto_id
       END--RETURN @ret_img_result  这句出错,也没必要加上这佑.CLOSE folder_img_cursor
    DEALLOCATE folder_img_cursor
    GO