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

Откуда:
Сообщений: 11
Подскажите пожалуйста, в чем дело? В результирующей табл. не выводятся первые значения всех переменных, кроме @c. Далее все норм. ( Рис.1)
Картинка с другого сайта.

Собственно говоря сам курсор (костяк взят с этого форума) :
DECLARE @tbl TABLE (КарточкаID INT, СвязиID VARCHAR(8000), Дата_Рег Varchar(8000))


DECLARE @c INT, @p VARCHAR(8000), @reg Varchar (8000), @cNext INT, @pNext VARCHAR(max), @idNext VARCHAR(40), @regNext Varchar (40)
DECLARE c CURSOR FOR
        SELECT f_parentID, t_carddoc.f_id, t_carddoc.f_Topic, t_carddoc.f_dtRegisterDT
          FROM t_relation left join t_carddoc on t_carddoc.f_id = f_dependentID
          where (t_Relation.f_Type = 3)
         ORDER BY f_parentID, t_carddoc.f_id ;
        OPEN c ;
        FETCH NEXT FROM c INTO @cNext, @idNext, @pNext, @regNext ;
        SET @c = @cNext ;
        WHILE @@FETCH_STATUS = 0 BEGIN
             IF @cNext != @c BEGIN
                  INSERT @tbl SELECT @c, @p, @reg ;
                  SELECT @p = 'Id: ' + @idNext + ' ' + ', Тема: ' + @PNext  ;
                  Select @reg = 'Id: ' + @idNext + ' ' + ', Дата рег: ' + @regNext, @c =@cNext  ;
             end else 
             begin
                  SET @p = COALESCE(@p + ', Id: ', SPACE (0))+ @idNext + ' ' + ', Тема: ' + @pNext ;
                  SET @reg = COALESCE(@reg + ', Id: ', SPACE (0)) + @idNext + ' ' + ', Дата рег: ' + @regNext ;
                END 
                  
             FETCH NEXT FROM c INTO @cNext, @idNext, @pNext, @regNext
        END
        INSERT @tbl SELECT @c, COALESCE (@p, ''), COALESCE (@reg, '') ;
        CLOSE c ;
DEALLOCATE c ;
SELECT * FROM @tbl ;
7 сен 12, 16:57    [13131549]     Ответить | Цитировать Сообщить модератору
 Re: Курсор выводит не все данные.  [new]
guest12345
Guest
Что значит "В результирующей табл. не выводятся первые значения всех переменных"?

SET @c = @cNext
вот вы в переменную @c записали значение из первой считанной курсором записи. Больше вы эту переменную не трогаете.

IF @cNext != @c BEGIN
А вот условие, которое говорит всегда игнорировать первую считаную курсором запись. Вас именно это беспокоит?
7 сен 12, 18:37    [13132171]     Ответить | Цитировать Сообщить модератору
 Re: Курсор выводит не все данные.  [new]
Alexden
Member

Откуда:
Сообщений: 11
guest12345,

guest12345
Что значит "В результирующей табл. не выводятся первые значения всех переменных"?


Дело в том, что у первых 7 значений (258-311) в базе имеются и связи и инфа о рег. Но, как видно на скрине, инфа отсутствует.
8 сен 12, 10:05    [13133473]     Ответить | Цитировать Сообщить модератору
 Re: Курсор выводит не все данные.  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
а если так?
SELECT КарточкаID, cast(СвязиID as varbinary(8000)), cast(Дата_Рег as varbinary(8000)) FROM @tbl
8 сен 12, 10:36    [13133501]     Ответить | Цитировать Сообщить модератору
 Re: Курсор выводит не все данные.  [new]
обнуляющий нуллы
Guest
Alexden,

ну выполни просто курсорный селект и посмотри что он возвращает.

стопудово там нуллы которые попадают в переменные @idNext, @pNext, @regNext,
которые обнуляют суммарную строку при складывании с другими подстроками.
8 сен 12, 10:40    [13133509]     Ответить | Цитировать Сообщить модератору
 Re: Курсор выводит не все данные.  [new]
Alexden
Member

Откуда:
Сообщений: 11
daw
а если так?
SELECT КарточкаID, cast(СвязиID as varbinary(8000)), cast(Дата_Рег as varbinary(8000)) FROM @tbl


То вот так:))


Картинка с другого сайта.

обнуляющий нуллы
Alexden,

ну выполни просто курсорный селект и посмотри что он возвращает.

стопудово там нуллы которые попадают в переменные @idNext, @pNext, @regNext,
которые обнуляют суммарную строку при складывании с другими подстроками.



Так и есть, судя по всему. Восстановил чистую базу, добавил несколько карточек, к трем имеющимся, получилось вот это :
Вопрос: Как пережевать этот курсор и не подавиться нуллами?
Картинка с другого сайта.

Поначалу обрадовался, потом заметил отсутствие "ID:" в первой строчке.
10 сен 12, 13:31    [13139909]     Ответить | Цитировать Сообщить модератору
 Re: Курсор выводит не все данные.  [new]
user89
Member

Откуда:
Сообщений: 2083
Alexden,

???
SELECT КарточкаID, isnull(cast(СвязиID as varbinary(8000)), 0x0), isnull(cast(Дата_Рег as varbinary(8000)), 0x0) FROM @tbl
10 сен 12, 16:19    [13141239]     Ответить | Цитировать Сообщить модератору
 Re: Курсор выводит не все данные.  [new]
Alexden
Member

Откуда:
Сообщений: 11
user89

???
SELECT КарточкаID, isnull(cast(СвязиID as varbinary(8000)), 0x0), isnull(cast(Дата_Рег as varbinary(8000)), 0x0) FROM @tbl

Картинка с другого сайта.
10 сен 12, 16:28    [13141305]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить