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

Откуда: Екатеринбург
Сообщений: 310
Есть процедура
exec [MyProcedure] @Param1, @Param2

Нужно эту процедуру выполнить для всех значений возвращаемых запросом
select Param1, Param2
from MyDataTable

Порядок выполнения неважен, то есть не имеет значения какая пара значений передастся первая. Можно ли это сделать не используя курсоры?
1 июн 12, 10:51    [12649072]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение процедуры для всех параметров из запроса.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Если версия сервера позволяет, переписать процедуру так, чтоб она имела параметр табличного типа.
1 июн 12, 10:57    [12649124]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение процедуры для всех параметров из запроса.  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
.Anatoly.,
объявит табличный тип,в качестве параметра передавать табличную переменную и допилить процедуру.
Работает начина с SQL Server 2008.
Можно упаковать в xml и допилить процедуру.
Если нет желание допиливать процедуру,то курсор.
1 июн 12, 10:59    [12649144]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение процедуры для всех параметров из запроса.  [new]
.Anatoly.
Member

Откуда: Екатеринбург
Сообщений: 310
Спасибо за ответы!
Значит курсор(
1 июн 12, 11:01    [12649182]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение процедуры для всех параметров из запроса.  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
.Anatoly.,

Необходимость выполнения exec много раз, один из немногих случаев, когда без курсора пока никак. А может быть условия позволяют, из процедуры сделать функцию? Тогда бы вы ее напрямую могли использовать в запросе...
1 июн 12, 11:13    [12649311]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение процедуры для всех параметров из запроса.  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
SomewhereSomehow
без курсора пока никак
*без цикла всмысле
1 июн 12, 11:14    [12649322]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение процедуры для всех параметров из запроса.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
.Anatoly.
Значит курсор


Совсем необязательно.

DECLARE @sql nvarchar(max)

SELECT @sql = ISNULL(@sql, '') + 'EXEC sp_helpdb ''' + name + '''' + ';' FROM sys.databases

EXEC sp_executesql @sql
1 июн 12, 11:17    [12649353]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение процедуры для всех параметров из запроса.  [new]
.Anatoly.
Member

Откуда: Екатеринбург
Сообщений: 310
pkarklin
.Anatoly.
Значит курсор


Совсем необязательно.

DECLARE @sql nvarchar(max)

SELECT @sql = ISNULL(@sql, '') + 'EXEC sp_helpdb ''' + name + '''' + ';' FROM sys.databases

EXEC sp_executesql @sql


А будет ли реальный выигрыш от такого выполнения? Или мы просто не будем использовать курсор?
1 июн 12, 11:20    [12649385]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение процедуры для всех параметров из запроса.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
.Anatoly.
А будет ли реальный выигрыш от такого выполнения?


Вам предоставляется возможность это сравнить.
1 июн 12, 11:23    [12649412]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение процедуры для всех параметров из запроса.  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
.Anatoly.,
ну раз так пошло
Если табличка большая,то складывать лучше как-то так
+

declare @MyDataTable table
  (
    Param1 varchar(10)
  , Param2 varchar(10)
  )
insert  into @MyDataTable
        ( Param1, Param2 )
values  ( '1', '11' )
,       ( '2', '22' )

declare @str varchar(max) ;
with  zz ( _str )
        as ( select 
(                   select  'exec storeproc ' + Param1 + ' , ' + Param2 + ' ; '
                    from    @MyDataTable
             for    xml path('')
                      , type).value('text()[1]', 'varchar(max)') as _str
           )
  select  @str = _str
  from    zz

select  @str

1 июн 12, 11:41    [12649553]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение процедуры для всех параметров из запроса.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Правило "не трогай" - ЗЛО!

Банально написать другую процедуру/триггер, которая бы работала для набора объектов - лень, а вот фантазировать курсор или там забубенный скрипт - так пожайлуста, с привеликим удовольствием, хоть днями на пролёт.

Свинство.

Homo sapiens - не, не слышал.

<ПшшЧпок>, переключил на следующий канал ... причмокивая
1 июн 12, 12:57    [12650163]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение процедуры для всех параметров из запроса.  [new]
RubinDm
Member

Откуда:
Сообщений: 461
Mnior
Свинство.
Очень, очень верно подмечено.

.Anatoly. , не ленитесь думать - это полезно. и таки-сделайте перезаточку процедуры на табличные данные.
Если будут сложности, то мы же Вам и поможем в благом деле. Но не в динамиках и курсорах.
1 июн 12, 22:59    [12654079]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить