2011-01-19 13 views
2

スクリプト全体に達する前にSQL Server Management Studioの出力ウィンドウにSelectステートメントの結果を強制的に適用する方法はありますか?SQL Serverスクリプト終了前にSelectステートメントを出力ウィンドウに出力する

私はすぐに実行される1つの選択クエリと、実行に時間がかかるものがあります。 2番目のクエリが実行されている間、最初のクエリの結果を調べたいと思います。

私の問題は、両方のクエリで同じ変数が使用され、 "GO"ステートメントが使用されている場合、変数が失われることです。以下の例。

declare @MyVar int 
set @MyVar = 1 

-- Query with short execution time 
select * 
from MyTable t 
where t.Column = @MyVar 

GO -- @MyVar is lost 

-- Query with long execution time 
select * 
from MyOtherTable o 
where o.Column = @MyVar -- @MyVar no longer exists 
+3

この問題は一度もありませんでした。 SSMSで生成された結果セットが表示されます。 –

+1

ああそうです。 'select * from master..spt_values waitfor delay '01:00 ''は2474行を返しますが、フラッシュされないバッファにまだ32が残っているようです。 'select top 1 * from master..spt_values waitfor delay '01:00 ''はすぐには行を返しません。 –

答えて

7

あなたは、バッファをフラッシュする原因となる、RAISEERRORを使用することができます。

RAISERROR('Just to print everything',0,1) WITH NOWAIT 

あなたは、クエリの間にこれを置くことができます。

+0

ビンゴ。 'select * from master..spt_values RAISERROR( 'すべて印刷するだけ'、0,1)NOWAIT waitfor delay '01:00 ''は私のために働きます。 –

+0

素晴らしいです。ありがとう!詳細情報:http://msdn.microsoft.com/en-us/library/ms178592.aspx –

3

代わりに、変数を一時テーブルに格納することもできます。

create table #MyTable (MyVar int) 
insert into #MyTable (MyVar) values (1) 

-- Query with short execution time 
select * 
from MyTable t 
where t.Column = (select MyVar from #MyTable) 

GO -- #MyTable is preserved 

-- Query with long execution time 
select * 
from MyOtherTable o 
where o.Column = (select MyVar from #MyTable) 
+0

これは私が現在問題を解決する方法です。私はより良い解決策を探していますが、これはうまくいきます。 –

関連する問題