Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 Concat导致存储过程中返回空值的单个字符串_Sql Server 2008_Tsql_Concatenation - Fatal编程技术网

Sql server 2008 Concat导致存储过程中返回空值的单个字符串

Sql server 2008 Concat导致存储过程中返回空值的单个字符串,sql-server-2008,tsql,concatenation,Sql Server 2008,Tsql,Concatenation,在存储过程中,我将结果连接到单个字符串中,如: Problem1|Problem2|Problem3 当我试图存储在变量@display中时,它返回null。当我运行查询而不将其存储到变量时,它会返回结果。不知道为什么返回空值 declare @display nvarchar(500) select @display = @display + gp2.ProblemDesc + '|' from (SELECT gp.GrantProblemID, gp.ProblemDesc,

在存储过程中,我将结果连接到单个字符串中,如:

Problem1|Problem2|Problem3
当我试图存储在变量
@display
中时,它返回null。当我运行查询而不将其存储到变量时,它会返回结果。不知道为什么返回空值

declare @display nvarchar(500)

select 
@display =  @display + gp2.ProblemDesc  + '|' 
from (SELECT gp.GrantProblemID, gp.ProblemDesc, gps.GrantProblemStatus, row_number() over (partition by gp.grantproblemid order by p.periodid desc) ranking from MergedProgressReport.dbo.[PeriodAgencyGrantProblems] pagp 
inner join MergedProgressReport.dbo.PeriodAgencyGrants pag on pag.PeriodAgencyGrantsID = pagp.PeriodAgencyGrantID and pag.GrantNumber =  '2011UMWX0001'
inner join MergedProgressReport.dbo.periodagencyinfo pai on pag.PeriodAgencyInfoID = pai.PeriodAgencyInfoID  inner join MergedProgressReport.dbo.Periods p on p.PeriodID = pai.PeriodID  
inner join MergedProgressReport.dbo.GrantProblemStatus gps on pagp.GrantProblemStatusID = gps.GrantProblemStatusID inner join MergedProgressReport.dbo.GrantProblems gp on pagp.GrantProblemID = gp.GrantProblemID and gp.GrantProblemAreaID = 7) xx
right join MergedProgressReport.dbo.GrantProblems gp2 on xx.GrantProblemID = gp2.GrantProblemID and xx.ranking = 1 where gp2.GrantProblemAreaID = 7

Select @display

试试这个。可能需要初始化变量

declare @display nvarchar(500)
set @display = ''  

简言之,在声明变量后编写查询之前,您缺少
set
语句。

可能是因为您有两个结果集?这两个结果集都有效,但当它通过一个过程时,我需要执行吗?例如:Exec MyExproc(@SQl nvarchar(3000),@display nvarchar(200)OUTPUT)看起来@display是您的存储过程参数,而不是变量。