如何在SQL中使用While循环来创建变量

Mis*_*ssy 1 t-sql sql-server

需要创建一个带有日期列表的IN子句.列表需要按降序排列.我创建了一个名为@cols的变量,并尝试使用以下代码填充它:

declare @end date='2016/05/30' 
declare @begin date = DATEADD(month, DATEDIFF(month, 0, @end), 0) ;
declare @curdate date = @end;  -- start on the last day
print @curdate;
print @begin;

DECLARE @cols NVARCHAR (MAX)

while @curdate >=@begin  -- goes from end of the month to beginning of the month
begin
     select @cols = @cols + ',[' + CONVERT(NVARCHAR, @curdate, 106) + ']';
     select @curdate =  DATEADD(DAY,-1,@curdate ) -- subtract a day
end

print @cols;   
print @curdate;
print @begin;
Run Code Online (Sandbox Code Playgroud)

我希望得到5/30/16,5/29/16,5/28/16等(当然格式正确).代码运行没有错误,但@cols总是为空.

Siy*_*ual 5

您获得a的原因NULL @Cols是因为在进入while循环之前尚未为其分配值.它仍然是NULL,NULL+任何= NULL.

要解决此问题,您可以@Cols在while循环之前设置等于空字符串:

DECLARE @cols NVARCHAR (MAX) = ''
Run Code Online (Sandbox Code Playgroud)