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

— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Здравствуйте, 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 >>
Всем огромное спасибо!!! Я понял всё. %)))