Bildiğiniz gibi sql serverda parametrik
cursor oluşturmada tam bir esneklik söz konusu değil. Bu başlamda daha önce
yazdığım 101 T-SQL İpucu-4 adlı makalemde farklı bir yaklaşımla kısmen de olsa parametrik cursor elde
etmiştik. Ama bu yöntem diğerlerinden çok farklı ve güçlü bir yöntemdir.
Parametrede veritabanını bile verebilirisiniz. Bu sayede aynı cursoru hiçbir
değişiklik yapmadan her veritabanında çalıştırabilirisiniz.
İşlemlerde temel olarak Sp_ExecuteSql prosedürü kullanılıyor. Bu prosedürün çıktı (Output) parametresi olarak cursor döndürebilmesi
bu makalemizin konusu zaten. Kullanımına ilişkin örnek aşağıda verilmiştir. Örnek
veritabanı olarak master veritabanı ve tablo olarak da sysobjects tablosu
kullanıldığı için bu örneği düzenlemeden olduğu gibi sisteminizde
çalıştırabilirisiniz.
Declare
@SqlStr NVarchar(4000),
@Cursor cursor,
@Xtype varchar(10),
@DB sysname,
@TabloName sysname
Select @Xtype = 'U' , @DB = 'Master'
set @SqlStr =
'Use '+@DB+'
SET @Cursor = CURSOR SCROLL FOR
Select Name From '+@DB+'..SysObjects
Where Xtype = '''+@Xtype+'''
Order By Name
OPEN @Cursor '
EXEC master..sp_executesql @SqlStr, N' @Cursor CURSOR OUTPUT ', @Cursor OUTPUT
fetch next from @Cursor into @TabloName
while @@Fetch_Status = 0
begin
Print @TabloName
fetch next from @Cursor into @TabloName
end
close @Cursor
Deallocate @Cursor

[
04.11.2007]