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


Автор: Wanderer2019 7.11.2007, 13:06
Подскажите, как выполнить хранимую процедуру для каждой записи в таблице Table?

Автор: Servena 7.11.2007, 13:25
Напиши сценарий, а лучше всего - давай пример. 

Автор: Wanderer2019 7.11.2007, 13:32
Цитата(Servena @  7.11.2007,  13:25 Найти цитируемый пост)
Напиши сценарий, а лучше всего - давай пример. 

Нутк было бы чего пример...
Есть таблица Table ... Есть процедура Procedure @Param1 @Param2 @Param3

Нужно запустить Procedure для каждой строки из Table. В параметры нужно передать значения из строк этой самой таблицы.
т.е. что то вроде
Код

DECLARE @Param1 varchar(255),@Param2 varchar(255),@Param3 varchar(255)
SELECT @Param1=Tabe.Field1, @Param2=Table.Field2, @Param3=Table.Field3 FROM Table


и вот как быть дальше... как для каждой строки вызвать мою Procedure

Автор: Servena 7.11.2007, 13:58
Вот пример в МСДН:
Код

DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title 
FROM AdventureWorks.HumanResources.Employee
WHERE ManagerID =3;
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM Employee_Cursor;
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;

Здесь создается курсор и построчно считываются все строки с таблицы.

Добавлено через 6 минут и 2 секунды
Что-то вроде этого:
Код

DECLARE myCursor CURSOR FOR
SELECT Field1, Field2, Field3 
FROM Table

OPEN myCursor;
FETCH NEXT FROM myCursor;
WHILE @@FETCH_STATUS = 0
   BEGIN
      /*Вот здесь впихнуть функцию, может так:*/ProcedureName Field1,Field2,Field3
      FETCH NEXT FROM myCursor;
   END;
CLOSE myCursor;
DEALLOCATE myCursor;


Добавлено через 14 минут и 53 секунды
А вот как наверное будет вообще правильно.
Код

DECLARE @Param1 varchar(255),@Param2 varchar(255),@Param3 varchar(255)
DECLARE myCursor CURSOR FOR
SELECT Field1, Field2, Field3 
FROM Table
OPEN myCursor;

FETCH NEXT FROM myCursor
INTO @Param1, @Param2, @Param3
WHILE @@FETCH_STATUS = 0
   BEGIN
      ProcedureName @Param1, @Param2, @Param3
      FETCH NEXT FROM myCursor
      INTO @Param1, @Param2, @Param3
   END;
CLOSE myCursor;
DEALLOCATE myCursor;

Автор: Wanderer2019 7.11.2007, 14:24
Цитата(Servena @  7.11.2007,  13:58 Найти цитируемый пост)
DECLARE @Param1 varchar(255),@Param2 varchar(255),@Param3 varchar(255)
DECLARE myCursor CURSOR FOR
SELECT Field1, Field2, Field3 
FROM Table
OPEN myCursor;
FETCH NEXT FROM myCursor
INTO @Param1, @Param2, @Param3
WHILE @@FETCH_STATUS = 0
   BEGIN
      ProcedureName @Param1, @Param2, @Param3
      FETCH NEXT FROM myCursor
      INTO @Param1, @Param2, @Param3
   END;
CLOSE myCursor;
DEALLOCATE myCursor;


Да. вероятно как то так оно и будет... хотя при попытке вместо процедуры вбить что то типа SELECT @Param1, @Param2 появляется не совсем понятный мне набор данных...


Автор: Servena 7.11.2007, 14:27
Если использовать Селект, то нужно так:
Код

SELECT @Param1=....

SELECT ..... FROM ....


Добавлено через 2 минуты и 23 секунды
Если посмотреть что выдаст, попробуй PRINT.

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