都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

SQL Server Management Studio のメッセージ領域にリアルタイムに処理状況を表示させてみる

 先ほど羽田空港に到着しました。空港でブログ書いてますー。
f:id:koogucc11:20150829180139j:plain

 今週の後半は、新潟からの、東京に戻って、那覇という強行スケジュール。
f:id:koogucc11:20150827224022j:plain

 仕事なので、特に楽しいことはありません.....そりゃ、深夜からビールくらいは飲みましたよ、オリオンビールね。
f:id:koogucc11:20150829180620p:plain

 SQL を実行し、その途中経過を知るために一連の処理の中で PRINT を使用して、様々な情報を出力することも多いかと思います。SQL Server Management Studio などで、一連の処理の中に PRINT を埋め込み情報を出力させても、すべての処理が完了するまで、PRINT に指定した文字列は SQL Server のメッセージ領域に表示されません。(下図の赤枠の部分です。)
f:id:koogucc11:20150829174933p:plain

 これでは、処理の進捗状況がイマイチわからないので、処理が長時間かかるものなどは処理されているのかどうか心配になってしまいます。このような要件を満たすには、RAISERROR を使用します。下記のサンプルを SQL Server Management Studio で実行させてみましょう。下記のサンプルでは、メッセージ領域にきちんと反映されているか確認しやすいように、WAITFOR を使用して、メッセージを出力する前に 5秒間待機させています。

DECLARE @cnt INT
DECLARE @msg NVARCHAR(50)

SET @cnt = 0

WHILE( @cnt < 10 )
BEGIN 
    SET @cnt = @cnt + 1
    WAITFOR DELAY '00:00:05'
    SET @msg = 'メッセージ'
    RAISERROR (@msg, 0, 1) WITH NOWAIT
END

f:id:koogucc11:20150829175542p:plain
これで、SQL の処理がどこまで進んでいるか等、リアルタイムに把握することが可能になりますね。

※そういえば、SQL Server 2016 CTP2.3 がリリースされましたね。早速検証せねば!!
Download Microsoft® SQL Server® 2016 Community Technology Preview 2.3 (CTP2.3) from Official Microsoft Download Center

Windows Server では、書籍が Technical Preview 版でまもなく出版されるようですが、SQL Server ではそんなことないんですかね?ないですよね....

Windows Server 2016テクノロジ入門 Technical Previewエディション

Windows Server 2016テクノロジ入門 Technical Previewエディション