Результаты сервера курсора SQL не отображаются должным образом? - PullRequest
0 голосов
/ 01 мая 2018

Пожалуйста, помогите ответить на этот вопрос. Почему мой результат CURSOR не отображает правильные результаты? Смотрите обе фотографии.

        declare @FullName varchar;
        declare @InvoiceID int;
        declare @CustomerID int;
        declare @DeliveryInstructions varchar;
        declare Salescur cursor for
        --select---
            select p.FullName, InvoiceID,CustomerID,DeliveryInstructions
            from Sales.Invoices s 
            inner join Application.People p
            on s.SalespersonPersonID = p.PersonID
            where InvoiceDate = '2016-05-31'
            and s.SalespersonPersonID = 8;

        open Salescur;
        fetch next from Salescur into @FullName,@InvoiceID,@CustomerID,
        @DeliveryInstructions;
        while @@FETCH_STATUS = 0
        begin 
            --print @InvoiceID + CHAR(13);
            print @FullName + 'has delivery instructions to these addresses: ' + @DeliveryInstructions
            fetch next from Salescur into @FullName,@InvoiceID,@CustomerID,
        @DeliveryInstructions;
        end
        close Salescur;
        deallocate Salescur;
    end;

Результат курсора

Таблица выбрана

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Как сказал Jeroen, вы объявили переменную типа VARCHAR, но не указали длину поля. Это приведет к длине 1.

Вам нужно сделать

DECLARE @FullName VARCHAR(50)

делая

DECLARE @FullName VARCHAR

вы бездействуете

DECLARE @FullName VARCHAR(1)

, поэтому вы получаете только первый символ

0 голосов
/ 01 мая 2018

Почему вы используете cursor, вы также можете сделать это через concat() function

select concat(p.FullName, ' has delivery instructions to these addresses: ', p.DeliveryInstructions)
from Sales.Invoices s 
inner join Application.People p 
      on s.SalespersonPersonID = p.PersonID
where InvoiceDate = '2016-05-31' and 
      s.SalespersonPersonID = 8;

Для старой версии вы можете использовать

select p.FullName + ' has delivery instructions to these addresses: ' +  p.DeliveryInstructions 
. . .
...