:: Не фоксом единым
OFF MSSQL и курсоры
Aries
Автор

Сообщений: 4349
Откуда: Николаев
Дата регистрации: 24.12.2002
Пытаюсь работать по аналогии с Фокспро, написал простую ХП

CREATE PROCEDURE RepAkt
@lnIndex ID=0
AS
BEGIN
DECLARE tCurZ CURSOR LOCAL FOR
SELECT tZayavka.*, tPredpr.cName AS cPredpr FROM tZayavka
LEFT OUTER JOIN tPredpr ON tPredpr.iIndex=tZayavka.nPredpr WHERE tZayavka.iIndex=@lnIndex
OPEN tCurZ
SELECT tCurZ.*, tPredpr.cName AS cIzgotov, tFoods.* FROM tCurZ
LEFT OUTER JOIN tPredpr ON tPredpr.iIndex=tCurZ.nIzgotov
INNER JOIN tFoods ON tFoods.iIndex=tCurZ.iIndex
WHERE tCurZ.iIndex=@lnIndex
CLOSE tCurZ
DEALLOCATE tCurZ
END
GO

При попытке выборки новых данных из tCurZ вываливает сообщение
объект не найден. По аналогии с Фоксом, я фоксе делал выборку в курсор
из курсора новую выборку и т.д.
В MSSQL это возможно, или я чего-то не дописал?




------------------
Я бы переписал жизнь, но Бог не дает мне исходники (с)
==============================
Злостный линуксоид!
Ratings: 0 negative/0 positive
Re: OFF MSSQL и курсоры
boba

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Это то зачем- CLOSE tCurZ
курсор то и убиваешь




------------------
не имей 100 рублей, а имей сто друзей
Ratings: 0 negative/0 positive
Re: OFF MSSQL и курсоры
Aries
Автор

Сообщений: 4349
Откуда: Николаев
Дата регистрации: 24.12.2002
Ошибка то не на CLOSE, а на селекте который выше




------------------
Я бы переписал жизнь, но Бог не дает мне исходники (с)
==============================
Злостный линуксоид!
Ratings: 0 negative/0 positive
Re: OFF MSSQL и курсоры
oleg_km

Сообщений: 487
Откуда: СПб
Дата регистрации: 02.12.2002
А это весь ко ХП, просто непонятно - зачем курсор (T-SQL), в конце концов можно обойтись временной таблицей
Ratings: 0 negative/0 positive
Re: OFF MSSQL и курсоры
Karat

Сообщений: 241
Дата регистрации: 29.03.2001
Курсор нужен для работы с каждой записью в курсоре отдельно, а не для получения запроса из этого курсора
Каждую запись в курсоре можно обработать индивидуально ((
Ratings: 0 negative/0 positive
Re: OFF MSSQL и курсоры
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Чем не устраивает более прямой вариант:

SELECT tCurZ.*,
tPredpr.cName AS cIzgotov,
tFoods.*
FROM (SELECT tZayavka.*,
tPredpr.cName AS cPredpr
FROM tZayavka
LEFT OUTER JOIN tPredpr
ON tPredpr.iIndex=tZayavka.nPredpr
WHERE tZayavka.iIndex=@lnIndex) tCurZ
LEFT OUTER JOIN tPredpr
ON tPredpr.iIndex=tCurZ.nIzgotov
INNER JOIN tFoods
ON tFoods.iIndex=tCurZ.iIndex

MS SQL и прочие "большие" СУБД имеют куда как более развитый диалект SQL...
А вообще я не уверен что T-SQL-ные курсоры можно напрямую использовать в
запросах... Даже с View (MSSQL-ным, не фоксовым) и то наверное проще
будет...
А вообще лучше спрашивай в форуме по MS SQL, например на
www.sql.ru




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: OFF MSSQL и курсоры
Alesha

Сообщений: 26
Откуда: Беларусь, Минск
Дата регистрации: 11.02.2003
Да, это вопрос для sql.ru
Для этих целей используется временная таблица:
select ... into #table ....
или
create table #table (...)
insert into #table select ....

Как правильно отметил Karat, T-SQL-курсоры нужны для обработки каждой записи запроса в отдельности.
Общий принцип работы для T-SQL-курсоров:

declare <cursor> cursor for
select ...
open <cursor>
fetch <cursor> into <var list>
while @@sqlstatus = 0
begin
..... /* действия над записью, значения полей которой в переменных <var list> */
fetch <cursor> into <var list>
end
close <cursor>
deallocate cursor <cursor>
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 27 MikhsR tata hvh2007  (Гостей: 24)

© 2000-2024 Fox Club 
Яндекс.Метрика