Sql server Sql server游标结果未正确显示?

Sql server Sql server游标结果未正确显示?,sql-server,database-cursor,Sql Server,Database Cursor,请协助回答这个问题。为什么我的光标结果不显示正确的结果?看两张照片 declare @FullName varchar; declare @InvoiceID int; declare @CustomerID int; declare @DeliveryInstructions varchar; declare Salescur cursor for --select--- s

请协助回答这个问题。为什么我的光标结果不显示正确的结果?看两张照片

        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;

为什么要使用
光标
,也可以通过
concat()
函数来实现

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 
. . .
为什么要使用
光标
,也可以通过
concat()
函数来实现

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 
. . .

正如Jeroen所说,您已将变量声明为type
VARCHAR
,但尚未指定字段长度。这将导致长度为1

你需要做什么

DECLARE @FullName VARCHAR(50)
通过做

DECLARE @FullName VARCHAR
你在做什么

DECLARE @FullName VARCHAR(1)

这就是为什么您只获得第一个字符的原因,正如Jeroen所说,您已经将变量声明为type
VARCHAR
,但没有指定字段长度。这将导致长度为1

你需要做什么

DECLARE @FullName VARCHAR(50)
通过做

DECLARE @FullName VARCHAR
你在做什么

DECLARE @FullName VARCHAR(1)

这就是为什么您只获得第一个字符的原因,因为使用不带长度的
varchar
是一个非常重要的问题。@jeroemoster谢谢,是的!因为使用没有长度的
varchar
是一个很好的选择,你应该踢它。@jeroenmoster谢谢,是的!谢谢大家!回答了我的问题!谢谢大家!回答了我的问题!大概是因为印刷品的使用,大概是因为印刷品的使用。