1

尝试在循环中使用 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 语句的机制,所以我很高兴我得到了一些回报,但我想了解明显的不一致之处。

4

1 回答 1

0

你需要使用

declare @a VARCHAR(max);
declare @b VARCHAR(max);

SELECT @a = '1',@b = '2'

print @a + @b

您不能将选择查询打印为打印

于 2012-12-07T20:11:13.913 回答