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

например используя процедуру

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].test
AS
BEGIN
DECLARE @name NCHAR(20),@lastname NCHAR(20)
DECLARE customer_cursor SCROLL CURSOR FOR
    SELECT name, lastname
    FROM dbo.Workers

OPEN customer_cursor

FETCH NEXT FROM customer_cursor INTO @name,@lastname
WHILE @@FETCH_STATUS=0

BEGIN
    FETCH FROM customer_cursor 
      INTO @name,@lastname
      SELECT @name,@lastname 
END

CLOSE customer_cursor

DEALLOCATE customer_cursor

END


в практике использования в Оракл, курсор возвращает целую таблицу
14 апр 12, 21:51    [12417865]     Ответить | Цитировать Сообщить модератору
 Re: Почему курсор возвращает несколько таблиц и в каждой таблице по одной записи ?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Потому что инструкция select возвращает набор. Нельзя сформировать один набор несколькими select'ами. И в Оракле будет ровно то же самое.

ЗЫ: С курсоромыслием в MS SQL делать нечего. Не заточен он под императивизм.
14 апр 12, 22:15    [12417926]     Ответить | Цитировать Сообщить модератору
 Re: Почему курсор возвращает несколько таблиц и в каждой таблице по одной записи ?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8879
В переводе на русский:
Вы в курсоре для каждой (вычитанной курсором) строки выполняете SELECT, который и возвращает отдельновзятую таблицу именно из вычитанной строки. Сколько строк вычитали, столько же SELECT-ов запустилт - соответственно столко таблиц по результату курсора и получили.

PS А почему тогда нельзя просто написать вместо курсора один селект с WHERE (от этого же курсора). Тогда и получите одну таблицу со всеми интересующими Вас строками. ИМБО, если что...
14 апр 12, 22:26    [12417969]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить