If you have a cursor definition including variables, in ASE, the variables are evaluated run time during the ‘open’ statement. In MS SQL Server, the variables are evaluated run time during the ‘declare’ statement.
Example
create proc SelDossiersByDate as
begin
declare @ADate DateTime, @DossierCode T_Code_Dossier
declare cr_DossiersOnDate cursor for
select DossierCode from T_DossierMain
where QuotDate = @ADate
order by DossierCode
select @ADate = '2000-10-27'
open cr_DossiersOnDate
fetch cr_DossiersOnDate into @DossierCode
while @@SQLStatus = 0 -- while @@Fetch_Status = 0
begin
select @DossierCode
fetch cr_DossiersOnDate into @DossierCode
end
close cr_DossiersOnDate
deallocate cursor cr_DossiersOnDate -- deallocate cr_DossiersOnDate
end
go
exec SelDossiersByDate
go
drop proc SelDossiersByDate
go
On ASE, the example above returns the DossierCodes of the dossiers having the 27th of October 2000 as a quotation date. On MS SQL Server, the DossierCodes of the dossiers without a quotation date (= NULL) are returned.