Я прошел несколько обсуждений, связанных (не точных) с этим, но я хочу знать правильное решение моей ситуации, и, следовательно, опубликовать этот вопрос.
Мне нужно выбрать некоторые записи из таблицы на основенекоторые условия и передать каждую запись значения в SP.
Я думал об использовании курсора для циклического перебора набора записей, после некоторого поиска в Google, которое я нашел, в то время как цикл также используется, и многие дискуссии о том, какой из них лучший, существуют, и большинство из них сказали, что это зависит от ситуации.Теперь я не могу судить о своей ситуации, поэтому ставлю перед экспертами.
Вот цикл while, о котором я подумал:
Table Test
{
id int
value int
-- Some more fields
}
WHILE EXISTS(SELECT TOP 1 id FROM Test WHERE isValid=1)
BEGIN
DECLARE @id AS INT
DECLARE @value AS INT
SELECT TOP 1 @id=id, @value=value FROM Test WHERE isValid=1
EXEC SP_SomeProcessingSP @id, @value -- Some more fields passed to it from above table
-- After execution of the above SP I need to update the record to invalid
UPDATE Test SET isValid = 0 WHERE id=@id
END
Этот подход лучше, чем курсор?Было бы замечательно, если бы кто-нибудь смог придумать лучшее решение без while и курсора (я хочу избежать обоих).
Edit: Модифицировал блок while и также дал пример таблицы.Теперь SP, который вызывается внутри этого блока while, получает доступ к данным из нескольких таблиц, выполняет некоторую обработку и вставляет данные в пару других таблиц.