ループ内で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ステートメントの仕組みを学んだばかりなので、何かが戻ってきてうれしいですが、明らかな矛盾を理解したいと思います。