1つのクエリの結果を使用してグローバルな一時テーブルを作成しようとしていますが、テーブルとして選択して何度も何度もデータを再処理しなくてもさらに操作できます。Excel - SQLクエリ - ## Tempテーブル
これはSQL管理スタジオでは完全に機能しますが、Excelクエリでテーブルを追加しようとすると、テーブルはその時点で参照できますが、tempdbデータベースのテンポラリテーブルには作成されません。
私はそれを簡単な例に分解しました。
私はSQL管理スタジオでこれを実行する場合は、1の結果が期待通りに返され、テーブル## testtable1は、一時表に
set nocount on;
select 1 as 'Val1', 2 as 'Val2' into ##testtable1
select Val1 from ##testtable1
を作成している私は、このテーブルの上に別の選択を実行することができ、別のセッションでも、あなたが期待していたとおりです。例えば。
Select Val2 from ##testtable1
## testtable1を削除しないと、Excelのクエリで以下を実行すると2の結果が返されます。私は、直接Excelで## testtable1クエリSELECT ... INTO同じことを実行する場合
Select Val2 from ##testtable1
しかし、それは正しく1の結果を返しますが、TEMPTABLEは作成されません。私はその後、別のクエリとして
Select Val2 from ##testtable1
を実行しようとすると、そのエラーは、テーブルがSQL管理スタジオで一時テーブル内にリストされていない「無効なオブジェクト名 『## testtable1』
言っ
クエリの実行が終了した後、私はドロップを呼び出していない午前にもかかわらず、それは、テーブルの上にドロップを実行しているかのように。
それはある。
方法私はこれを解決できますか?
なぜグローバルな一時テーブルが最初に必要ですか?それらは並行性の問題があります。グローバルテーブルを使用している最後の接続が閉じられると、グローバルテーブルが削除されることに注意してください。つまり、Excelで作成しても、それを使用しない場合は、一時表が無期限にハングアップするだけではありません。 –
@SeanLangeがすでに言及したことを強調するだけです.SSMSは、Excelができない間にセッションを開いたままにします。クエリを送信するたびに、新しいセッションが作成され、すぐに再び閉じられます(クエリが完了すると)。 – Ralph
これは最終的に、親会社に属する5つのブランドの財務バランスシートレポートを作成することです。各ブランドは別々のデータベースです。 結果を返す5つのクエリがあります。それらの結果をまとめて「グループ合計」として追加する必要があります。 1つのクエリですべてを実行できない理由はありませんが、5つのクエリのそれぞれが22,000文字であるため、それらをすべて一緒に追加すると.ConnectionString文字の制限を超えてしまいます。 この方法では、Management Studioで完全に機能しますが、Excelを介してそのデータ処理を実行しようとしているだけです。 – OWSam