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

Откуда:
Сообщений: 9
ПРоцедура возвращает курсор
Create procedure proc1 @1 int, @2 varchar, @ResultCurs CURSOR VARYING OUTPUT )
....
....
....
SET @ResultCurs = CURSOR
FORWARD_ONLY Static FOR
select* from #Result
OPEN @ResultCurs
End

получение данных
Declare @CursorRes CURSOR, @r varchar (100), @m money, @Count int
Select @Count=1
Create Table #T (Number_of_bill varchar(100), Current_charges money)

EXEC ob_ViewAccountNotPay '1', '4', @CursorRes OUTPUT
Select @Count=1

WHILE (@@FETCH_STATUS =0)
--WHILE (@Count <@@Cursor_Rows)
BEGIN
--FETCH Absolute @Count FROM @CursorRes
FETCH Next FROM @CursorRes
Into @r, @m
Insert Into #T VALUEs ( @r, @m)
Select @Count=@Count+1
END
CLOSE @CursorRes
DEALLOCATE @CursorRes

Select * From #T

Проблема в то что если в WHILE @@FETCH_STATUS =0 не возвращает ни одной строки если заменить на "<>" возвращает 1 строку, если заменить обратно на "=" возвращает все но только один раз ! пробовол через Absolute ни чего не возвращает,
подскажите где ошибка ??
7 июл 05, 09:24    [1682623]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Glory
Member

Откуда:
Сообщений: 104760
Declare @CursorRes CURSOR, @r varchar (100), @m money, @Count int
Select @Count=1
Create Table #T (Number_of_bill varchar(100), Current_charges money)

EXEC ob_ViewAccountNotPay '1', '4', @CursorRes OUTPUT
Select @Count=1
FETCH Next FROM @CursorRes Into @r, @m
WHILE (@@FETCH_STATUS =0)
BEGIN
    FETCH Next FROM @CursorRes Into @r, @m
    Insert Into #T VALUEs ( @r, @m) 
    Select @Count=@Count+1
END
CLOSE @CursorRes
DEALLOCATE @CursorRes 

Select * From #T
7 июл 05, 10:06    [1682751]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Oleg_79
Member

Откуда:
Сообщений: 9
Спасибо :)
7 июл 05, 10:21    [1682827]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Glory
Member

Откуда:
Сообщений: 104760
И еще - FETCH внутри цикла должен быть последней командой
Declare @CursorRes CURSOR, @r varchar (100), @m money, @Count int
Select @Count=1
Create Table #T (Number_of_bill varchar(100), Current_charges money)

EXEC ob_ViewAccountNotPay '1', '4', @CursorRes OUTPUT
Select @Count=1
FETCH Next FROM @CursorRes Into @r, @m
WHILE (@@FETCH_STATUS =0)
BEGIN
    Insert Into #T VALUEs ( @r, @m) 
    Select @Count=@Count+1
    FETCH Next FROM @CursorRes Into @r, @m
END
CLOSE @CursorRes
DEALLOCATE @CursorRes 

Select * From #T
7 июл 05, 10:23    [1682840]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Oleg_79
Member

Откуда:
Сообщений: 9
Вся эта замута не помогла :)
У меня следующая проблема есть 3 сервера, 1 имеет линк на 2 а 2 на 3 (переделать нельзя) нужно набор данные (табличка) с 3 сервера передать на 1. Пробовал возращать таблицу из функции, курсор из процедуры, пробовал insert into # exec sp_proc. Не работает :( сделал через промежуточные таблицы. А есть способ организовать это без промежуточных табличек ?
7 июл 05, 11:54    [1683372]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Glory
Member

Откуда:
Сообщений: 104760
На 2ом сервере пишите процедуру/представление/функцию, которое выбирает данные с 3го сервера.
На 1ом серере обращаетесь к этой процедуре/представлению/функции 2го сервера
7 июл 05, 11:57    [1683393]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Oleg_79
Member

Откуда:
Сообщений: 9
Пробовал так, функцию удаленно не дает запускать, курсор из процедуры не передает, работает все только если с запустить процедуру на локальном сервер и получать данные с удаленого, а что бы транзитом через сервер не получается. (И еще одна проблема процедура запускается из Job что бы отловить ошибку при падении Linked server)
PS сделел через промежуточные таблицы работает но охота как то без них
7 июл 05, 12:14    [1683480]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Glory
Member

Откуда:
Сообщений: 104760
курсор из процедуры не передает
Зачем курсор-то ?
7 июл 05, 12:16    [1683493]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Oleg_79
Member

Откуда:
Сообщений: 9
Почему не передает ?
@ResultCurs CURSOR VARYING OUTPUT у меня первый вопрос был как раз про это.
7 июл 05, 12:19    [1683511]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Glory
Member

Откуда:
Сообщений: 104760
Oleg_79
Почему не передает ?
@ResultCurs CURSOR VARYING OUTPUT у меня первый вопрос был как раз про это.

Не "почему", а "зачем" используется возврат курсора вместо возврата сразу результата запроса ?
7 июл 05, 12:21    [1683523]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Oleg_79
Member

Откуда:
Сообщений: 9
понятно, но это же не работает :)
а какие еще есть способы, как Вы реализовали бы данную задачу. Мне интересно как еще можно получить результат, какие есть методы ?
PS именно средствами SQL сохранение в файл (не расматриваяbcp и bulk insert)
7 июл 05, 12:30    [1683585]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Glory
Member

Откуда:
Сообщений: 104760
понятно, но это же не работает :)
Описание любой проблемы как "не работает" конечно занимает меньше места при нааисании поста. Но делает его совершенно неинформативным

именно средствами SQL сохранение в файл
Откуда вдруг файл взялся ?
Вы сами-то понимаете что хотите получить ?
7 июл 05, 12:34    [1683614]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Oleg_79
Member

Откуда:
Сообщений: 9
пропустил "не", средствами SQL, а не сохранением в данных файл и передача (email, TCP, итд.)
Сообщение которое выдается при ошибке, не могу передать курсов на удаленный сервер. ПРостой пример если запустить процедуру на локальном сервере exec [procedure] все работает, если так exec [server].[DataBase].[dbo].[procedure] нет пишет "не могу передать курсов на удаленный сервер"
7 июл 05, 13:07    [1683832]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Glory
Member

Откуда:
Сообщений: 104760
если так exec [server].[DataBase].[dbo].[procedure] нет пишет "не могу передать курсов на удаленный сервер"

Опять двадцатьпять !

ЗАЧЕМ вам нужен именно курсор из удаленной процедуры ?
7 июл 05, 13:10    [1683854]     Ответить | Цитировать Сообщить модератору
 Re: CURSOR VARYING OUTPUT не могу получить результат  [new]
Oleg_79
Member

Откуда:
Сообщений: 9
Так то в принципе мне все равно хоть курсор хоть что.
все выглядит следующим образом
сревер 2
sp_1 (@1, @2)
select * from [server3].[db].[t]

на сервер 2 выполняем Insert Into #T Exec sp_1 (@1, @2) работает
если Insert Into #T Exec [server2].[db].sp_1 (@1, @2) не работает - ответ "Не могу начать рапределенную транзакцию" MSDTC запушен
функцию [server2].[db].fn_1 вообще не запускает ответ "Слишком ного параметров"
7 июл 05, 13:24    [1683932]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить