Re: Цикл в stored procedure?!?
От: _MarlboroMan_ Россия  
Дата: 23.04.03 09:54
Оценка: 9 (3)
Здравствуйте, AlickSOV, Вы писали:

ASO>Подскажите пожалуйста не знающему человеку.

ASO>Как в SQL Server 2000 организовать цикл который скажем осуществляет перебор записей к примеру из запроса SELECT ID FROM TABLE1 WHERE <CONDITION>.
ASO>Это нужно для того, чтобы для каждого ID выполнить хранимую процедуру.

ну можно, как посоветовали товарищи, погеморочиться с курсорами, а можно воспользоваться и нововведением 2000-го сиквела — функциями :))

оформляешь свою процедуру проверки как скалярную ф-цию.

create function aaa( @id int)
returns int
as
begin
....

    return (какой-нить int, заодно можно отследить возникшие коллизии в процессе выполнения ф-ции)
end


а вот портом....

SELECT aaa(ID) FROM TABLE1 WHERE <CONDITION>.



вуаля :)

только имей ввиду, что из ф-ции ты не имеешь права выполнять всякие INSERT, DELETE, EXECUTE, sp_execsql и т.д. только запросы и всякую "арифметику"...
... << RSDN@Home 1.0 beta 6a >>

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Re: Цикл в stored procedure?!?
От: Sprinters Россия  
Дата: 23.04.03 11:58
Оценка: 9 (2)
Здравствуйте, AlickSOV, Вы писали:

ASO>Подскажите пожалуйста не знающему человеку.

ASO>Как в SQL Server 2000 организовать цикл который скажем осуществляет перебор записей к примеру из запроса SELECT ID FROM TABLE1 WHERE <CONDITION>.
ASO>Это нужно для того, чтобы для каждого ID выполнить хранимую процедуру.

ASO>Спасибо.


select identity(int,1,1) code,* into #t from table

declare @i int
declare @m int

select @m=count(*) from #t
select @i=1

while (@i<=@m)
  begin
    -- сдесь делаешь что надо с записью
    select * from #t where code=@i 

    select @i=@i+1
  end


Может где и ошибся но идея понятна.
Работает в разы быстрее курсоров.
... << RSDN@Home 1.0 beta 6a >>
Re: Цикл в stored procedure?!?
От: Lloyd Россия  
Дата: 23.04.03 09:47
Оценка: 6 (2)
Здравствуйте, AlickSOV, Вы писали:

Ключевое слово -- курсор. Вот пример из BOL. Подробности смотри там же.

SET NOCOUNT ON

DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40),
   @message varchar(80), @title varchar(80)

PRINT "-------- Utah Authors report --------"

DECLARE authors_cursor CURSOR FOR 
SELECT au_id, au_fname, au_lname
FROM authors
WHERE state = "UT"
ORDER BY au_id

OPEN authors_cursor

FETCH NEXT FROM authors_cursor 
INTO @au_id, @au_fname, @au_lname

WHILE @@FETCH_STATUS = 0
BEGIN
   PRINT " "
   SELECT @message = "----- Books by Author: " + 
      @au_fname + " " + @au_lname

   PRINT @message

   -- Declare an inner cursor based   
   -- on au_id from the outer cursor.

   DECLARE titles_cursor CURSOR FOR 
   SELECT t.title
   FROM titleauthor ta, titles t
   WHERE ta.title_id = t.title_id AND
   ta.au_id = @au_id   -- Variable value from the outer cursor

   OPEN titles_cursor
   FETCH NEXT FROM titles_cursor INTO @title

   IF @@FETCH_STATUS <> 0 
      PRINT "         <<No Books>>"     

   WHILE @@FETCH_STATUS = 0
   BEGIN
      
      SELECT @message = "         " + @title
      PRINT @message
      FETCH NEXT FROM titles_cursor INTO @title
   
   END

   CLOSE titles_cursor
   DEALLOCATE titles_cursor
   
   -- Get the next author.
   FETCH NEXT FROM authors_cursor 
   INTO @au_id, @au_fname, @au_lname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

-------- Utah Authors report --------
 
----- Books by Author: Anne Ringer
         The Gourmet Microwave
         Is Anger the Enemy?
 
----- Books by Author: Albert Ringer
         Is Anger the Enemy?
         Life Without Fear
Re: Цикл в stored procedure?!?
От: vvaizh http://izh-test.sourceforge.net/
Дата: 23.04.03 09:46
Оценка: 2 (1) +1
Смотри FETCH в MSDN
http://izh-test.sourceforge.net/russian/introduction.html
Цикл в stored procedure?!?
От: AlickSOV Беларусь  
Дата: 23.04.03 09:39
Оценка:
Подскажите пожалуйста не знающему человеку.
Как в SQL Server 2000 организовать цикл который скажем осуществляет перебор записей к примеру из запроса SELECT ID FROM TABLE1 WHERE <CONDITION>.
Это нужно для того, чтобы для каждого ID выполнить хранимую процедуру.

Спасибо.
Re: Цикл в stored procedure?!?
От: AlickSOV Беларусь  
Дата: 23.04.03 12:07
Оценка:
Всем огромное спасибо!!! Я понял всё. %)))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.