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

Откуда:
Сообщений: 6
Есть таблица Т с полем П (целочисленное) и запрос по ней.
Есть надобность запустить процедуру столько раз, сколько строк в результате запроса.
Параметр процедуры-значение поля поля П

DECLARE @i as int
SET @i = (SELECT П from Т)
WHILE @i > 0 EXEC ПРОЦЕДУРА @i

Так не работает
.Net SqlClient Data Provider: Msg 512, Level 16, State 1, Line 10
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

А как сделать перебор значений запроса я обыскался, не нашел.
Прошу совета.
Спасибо.
7 дек 11, 16:43    [11723246]     Ответить | Цитировать Сообщить модератору
 Re: Неоднократный запуск процедуры  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Читать про declare cursor. Хотя можно и через while обычный.

Сообщение было отредактировано: 7 дек 11, 16:47
7 дек 11, 16:47    [11723289]     Ответить | Цитировать Сообщить модератору
 Re: Неоднократный запуск процедуры  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
DECLARE @i as int = -1 -- На единицу меньше минимально возможного значения вашего П

while @i is not null begin
  set @i = null
  SELECT top 1 @i = П from Т where П > @i order by П
  if @i is not null
    EXEC ПРОЦЕДУРА @i
end
7 дек 11, 16:51    [11723353]     Ответить | Цитировать Сообщить модератору
 Re: Неоднократный запуск процедуры  [new]
Георгий_Иванов
Member

Откуда:
Сообщений: 6
Гавриленко Сергей Алексеевич,
спасибо вам, пойду попробую.
7 дек 11, 16:54    [11723396]     Ответить | Цитировать Сообщить модератору
 Re: Неоднократный запуск процедуры  [new]
Георгий_Иванов
Member

Откуда:
Сообщений: 6
Попробовал, полцчается интереснее, но
set @i = -1
while @i is not null
begin
set @i = null
SELECT TOP 1 @i = K from N Order By K
if @i is not null
SELECT @i
--EXEC QQQ @i
end


Вот тут идет бесконечный цикл и одинаковое значение @i, т.е. нет movenext
Что не так?
Спасибо.
7 дек 11, 17:52    [11724012]     Ответить | Цитировать Сообщить модератору
 Re: Неоднократный запуск процедуры  [new]
Георгий_Иванов
Member

Откуда:
Сообщений: 6
Да, вижу, что не так.
Спасибо.
7 дек 11, 17:54    [11724021]     Ответить | Цитировать Сообщить модератору
 Re: Неоднократный запуск процедуры  [new]
dmitry stakanov
Member

Откуда:
Сообщений: 241
Георгий_Иванов,

именно процедеру? не функцию?

судя по вопросу задача для оператора cross apply.
7 дек 11, 18:25    [11724243]     Ответить | Цитировать Сообщить модератору
 Re: Неоднократный запуск процедуры  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Георгий_Иванов
Что не так?
Как минимум, нет условия where в запросе.
7 дек 11, 19:01    [11724495]     Ответить | Цитировать Сообщить модератору
 Re: Неоднократный запуск процедуры  [new]
Георгий_Иванов
Member

Откуда:
Сообщений: 6
Гавриленко Сергей Алексеевич
Георгий_Иванов
Что не так?
Как минимум, нет условия where в запросе.


Ага, именно так.
Сначала написал вопрос, и тут же увидел косяк.
8 дек 11, 10:38    [11727088]     Ответить | Цитировать Сообщить модератору
 Re: Неоднократный запуск процедуры  [new]
Георгий_Иванов
Member

Откуда:
Сообщений: 6
dmitry stakanov
Георгий_Иванов,

именно процедеру? не функцию?

судя по вопросу задача для оператора cross apply.


Не суть, мне нужен результат, а способ любой.
8 дек 11, 10:39    [11727097]     Ответить | Цитировать Сообщить модератору
 Re: Неоднократный запуск процедуры  [new]
dmitry stakanov
Member

Откуда:
Сообщений: 241
Георгий_Иванов,

код процедуры можно?
8 дек 11, 12:29    [11728194]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить