尝试在循环中使用 print 语句时出现意外结果。
这是循环。现在,我碰巧知道此表中没有 createDtTm 早于 2012 年 6 月的数据。
我试图返回格式良好的结果,并在单个窗格中剔除空值,因此所有转换并将返回的数据放入 @text 变量中进行打印。
Declare @month int, @day int, @text VARCHAR(max)
Select @month=1
Select @day=1
While @month < 13 Begin
While @day < 32 Begin
select @month, @day
set @text = (SELECT cast(min([createDtTm]) as varchar(50)) + ' | ' + cast(max([createDtTm]) as varchar(50)) + ' | ' + cast(DATEDIFF (ss, min([createDtTm]), max([createDtTm])) as varchar(50))
FROM [database].[dbo].[table]
where datepart(yy, createDtTm) = 2012
and datepart(mm, createDtTm) = @month
and datepart(dd, createDtTm) = @day
and datepart(hh, createDtTm) > 17
and cast(Request as varchar(max)) like '%sometext%');
print @text
Set @day = @day + 1
End
Set @month = @month + 1
Set @day = 1
End
此查询返回我期望的结果。
当我注释掉调试语句时
select @month, @day
我没有得到任何结果。仅在内循环中执行 SELECT 会返回一个长长的窗格,其中包含“NULL”和“(受影响的 1 行)”之类的文本,我宁愿避免这种情况。
想法?今天早上我刚刚学习了变量设置、PRINT、WHILE 和 BEGIN/END 语句的机制,所以我很高兴我得到了一些回报,但我想了解明显的不一致之处。