Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 динамический sql и курсор  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
Добрый субботний день!

Вот ситуация следующая...
есть таблица есть

create table dbo.main(
name varchar(50),
-- еще поля..
par1 int,
par2 int,
par3 int
);


есть хранимая процедура sp_main куда передаются возможные значения par1, par2, par3

exec dbo.sp_main @par1 = ' and par1 in (1, 2, 3, 5) ', @par2 = ' and par2 in (4, 2,) ', @par3 = ' and par3 in (9, 3, 8) ';


процедура выполняет в курсоре работу с выбранными по параметрам (средствами динамического sql) данными таблицы main.

так вот не получится так реализовать... нужная промежуточная реальная таблица... потому что динамический exec(@Query)
работает под другой сессией и не видит временную таблицу, используемую в курсоре.


create procedure dbo.sp_main
@par1 varchar(2000),
@par2 varchar(2000),
@par3 varchar(2000)
as
begin
  declare @q varchar(2000);

  decalre @tmpmain table(
    name varchar(50),
    -- еще поля..
    par1 int,
    par2 int,
    par3 int
  );  
  
  set @q = 'insert into @tmpmain select * from dbo.main where 1=1 ' + @par1 + @par2 + @par3;
  exec (@q);

  while ....
  begin
    declare main_cursor cursor for
    select * from @tmpmain;
   
    open main_cursor;
    -- ...
    close main_cursor;
    deallocate main_cursor;
  end
end;


С уважением,
shut-up-and-skate
14 янв 12, 11:34    [11903797]     Ответить | Цитировать Сообщить модератору
 Re: динамический sql и курсор  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
процедуру сделать с табличным входным параметром и забыть про динамику...кстати и курсор масдай
14 янв 12, 12:03    [11903827]     Ответить | Цитировать Сообщить модератору
 Re: динамический sql и курсор  [new]
Glory
Member

Откуда:
Сообщений: 104751
shut-up-and-skate
нужная промежуточная реальная таблица... потому что динамический exec(@Query)
работает под другой сессией и не видит временную таблицу, используемую в курсоре.

В вашем примерет использована табличная переменная, а не временная таблица
Временные таблицы как раз замечательно видны в вызываемых ниже процедурах и динамических запросах
Потому что динамический exec(@Query) работает в той же сессии. Только это другой пакет.

Ну а насчет принципа реализации вашей задачи прочитайте пост Knyazev Alexey
14 янв 12, 12:38    [11903869]     Ответить | Цитировать Сообщить модератору
 Re: динамический sql и курсор  [new]
бздых чих пых
Guest
Knyazev Alexey
процедуру сделать с табличным входным параметром и забыть про динамику...кстати и курсор масдай

server level-типы на любой бздых - такая прелесть!..
14 янв 12, 15:11    [11904162]     Ответить | Цитировать Сообщить модератору
 Re: динамический sql и курсор  [new]
афтор топика
Guest
спасибо за ответы!
14 янв 12, 23:24    [11905775]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить