Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Динамическое заполнение курсора


Автор: ksu04061992 30.11.2015, 11:19
Добрый день! Нужна помощь . В хранимой процедуре есть заполнение курсора таким образом:
Код

declare @nzak float 
declare @hvr float
declare @hlz float
declare @sum1 float
declare @cur cursor
exec sp_executesql N'set @cur = cursor scroll for 
            Select nzak,hvr,hlz,sum1 from [Bux_zatr].[dbo].[test] 
            where mes >= 1 and mes <= 3 and hlz=20 
            group by  nzak,hvr,hlz  open @cur', N'@cur cursor output',@cur output
fetch next from @cur into @nzak,@hvr,@hlz,@sum1 
while  @@FETCH_STATUS=0
                begin    
                      Insert into [Bux_zatr].[dbo].[Rasp_nds] (nzak,hvr,hlz,sum1) values (@nzak,@hvr,@hlz,@sum1)
                      fetch next from @cur into @nzak,@hvr,@hlz,@sum1 
                end


данный курсор копирует данные из одной таблицы и вставляет в другую, но проблема в том что условие
Код

where mes >= 1 and mes <= 3


меняется в зависимости от выбранных параметров, переданных процедуре, ну например может быть просто 
Код


where mes <= 3


Как реализовать такое изменение условия ? Заранее спасибо

Автор: Akina 30.11.2015, 11:27
Формируйте текст курсора в текстовой переменной программненько, учитывая все заморочки, а потом выполняйте.

Кстати, а зачем тут вообще курсор? всё это прекрасно выполняется одним запросом для всех записей сразу. Да и по скорости выиграешь.

Автор: chupachups 1.12.2015, 14:12
А зачем вообще мудрить с курсором? Разве нельзя просто тем же образом сформировать текст запроса вида INSERT INTO .... SELECT FROM ....
и выполнить его через exec sp_executesql

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Dinamicheskoye-zapolneniye-kursora-id565c06efae20154c4a8b4567#findElement_E7045_565d80a3ae2015550a5e96b3_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)