1

ループ内でprintステートメントを使用しようとすると、予期しない結果が発生します。

これがループです。さて、2012年6月より前のcreateDtTmでは、このテーブルにデータがないことがわかりました。

単一のペインでnullが削除された、適切にフォーマットされた結果を返そうとしているため、返されたデータをすべてキャストして@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 に答える