T-SQL:循环内的print语句查询返回结果不一致

时间:2012-12-07 19:48:28

标签: sql sql-server tsql

尝试在循环中使用print语句时,我得到了意外的结果。

这是循环。现在,我碰巧知道此表中没有早于2012年6月的createDtTm的数据。

我试图返回格式良好的结果,并在单个窗格中清除掉空值,因此所有的转换和放置返回的数据都会打印到@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会返回一个长而长的窗格,其中的文本类似于&#34; NULL&#34;和#34;(1行受影响)&#34;,我宁愿避免。

思考?我今天早上刚刚学会了变量设置,PRINT,WHILE和BEGIN / END语句的机制,所以我很高兴我能回复一些东西,但我想了解明显的不一致性。

1 个答案:

答案 0 :(得分:0)

您需要使用

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

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

print @a + @b

您无法将选择查询打印为打印