Вы можете назначить курсор динамической / переменной таблице, используя sp_execute sql и выводя открытый курсор. Имена курсоров также могут быть переменными.
declare @TableName1 varchar(50) = 'TableName';
--declare @sql nvarchar(max)= concat('set @mycursor = cursor for select * from ', QUOTENAME(@TableName1), '; open @mycursor;');
declare @sql nvarchar(max) = 'set @dynamicsqlcursor = cursor for select name from sys.objects; open @dynamicsqlcursor;';
declare @mycursor cursor,
@objname sysname;
exec sp_executesql @stmt = @sql, @params = N'@dynamicsqlcursor cursor output', @dynamicsqlcursor = @mycursor output; --the output cursor must be open
--no need to open the cursor, it is output "opened"
--open @mycursor;
fetch next from @mycursor into @objname;
while @@fetch_status = 0
begin
print 'object name=' + @objname;
fetch next from @mycursor into @objname;
end
close @mycursor;
deallocate @mycursor;