SQL 服务器游标需要在打开时而不是在声明时设置参数

SQL Server cursor needs to set the args upon open and not on declaration

我有一个用 Sybase 编写的旧程序,我需要将它迁移到 SQL 服务器。我面临的问题之一是,在 Sybase 中,我们通常使用变量来编写游标的声明。并且这个变量将在稍后设置,在定义游标之后,但在打开游标之前。因此,当游标打开时,查询将基于声明后设置的这些变量的值。

示例游标 CTSTRS_ACCDET 基于 trs_no。

select @AL_TRSNO=10
    DECLARE CTSTRS_ACCDET CURSOR FOR
    SELECT  AC_BR,
            AC_CY,
            AC_GL,
            AC_CIF,
            AC_SL,
            FC_AMOUNT
    FROM CTSTRS_ACC_DET
    WHERE 
     AND TRS_NO = @AL_TRSNO
    FOR READ ONLY
select @AL_TRSNO=20

打开游标后,我需要查询来检索编号为 20 而不是 10 的 trx。

一个@table变量或#temp table来存储@AL_TRSNO的值,光标从@table/#table中选择:

declare @o int;
declare @t table(val int);

set @o = 22;
insert into @t(val) values(@o);

declare c cursor dynamic for
select name, object_id
from sys.all_columns
where object_id = (select max(val) from @t);

open c;
fetch next from c;
close c;

set @o = 19;
delete from @t;
insert into @t(val) values(@o);

open c;
fetch next from c;
close c;

deallocate c;