BIのSSISで一時テーブルの作成ができない

このQ&Aのポイント
  • BIのSSISで一時テーブルの生成ができない問題について
  • グローバル一時テーブルの作成を試みたが生成されず、ストアド実行でも同様の問題が発生
  • グローバル一時テーブルの削除は可能なため、解決法を教えてほしい
回答を見る
  • ベストアンサー

BIのSSISで一時テーブルの作成ができない

Ver:SQLServer2005 SQL Server Business Intelligence の SSIS の、 「SQL 実行タスク」にて、グローバル一時テーブルの 作成を試みたところ、実行結果は問題なく完了となっているのですが、 実際にテーブルの生成がされていませんでした。 また、ストアド上でグローバル一時テーブルを作成するようにし、 そのストアドを実行させて問題なく完了させても、 やはりテーブルの生成がされていませんでした。。 なお、グローバル一時テーブルの削除は問題なくできます。 これは、そもそも出来ない操作なのか、 それとも、何か解決法があるのか、どなたかご教授願えないでしょうか? 恐れ入りますが、なにとぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

うーん、これはグローバル一時テーブルに対する理解の問題ですかね。 テーブルは作成されますが、タスク終了時に削除されているとご理解ください。 グローバル一時テーブルは他のセッションからも参照できますが、参照しているすべてのセッションが切断されるとなくなるのです。 したがって、後続の処理でも使う場合は、接続マネージャのプロパティで該当の接続について「RetainSameConnection=True」にしてください。いずれにしてもSSISの処理が完了したら、そのテーブルはなくなるはずです。 SSISの外でも参照させたい場合は、実テーブルをtempdbに作成するしかないと思います。

junzo_ex
質問者

お礼

無事、出来ました! 助かりました!ありがとうございました!

junzo_ex
質問者

補足

ご回答ありがとうございます。 なるほど、、、そういう事だったのですね。。 具体的に処理したい内容としては、 一時テーブル作成 ⇒ 一時テーブルにinsert ⇒ 一時テーブルデータ加工 ⇒ フラットファイル出力 といった事を実施したいので、 ご教授いただいた「RetainSameConnection=True」を試してみます!

関連するQ&A

  • SSISにて、一時テーブルを使ったファイルの取り込みがうまく行かない場合がある

    SQL Server2005 の SSISにて、一時テーブルを作成し、 その一時テーブルにフラットファイルを読み込む、 といった処理を行っています。 こちらの処理について、 SSIS インポート及びエクスポートウィザードで 作成した処理であれば問題なく動作するのですが、 手動で作成した処理だと、ウィザードで生成された パッケージと同じように設定しても、 検証の段階で 「##tblのfistload行セットが開けませんでした」 といったエラーメッセージが表示されてしまい、 実行そのものが出来ない状態にあります。 なぜ、ウィザードだと出来て、手動だと出来ないのか。。 プロパティ系の設定はひととおり抑えたつもりです。 どなたか同じ現象を体験した方、 また、解決方法をご存知の方がいらっしゃいましたら 何卒ご教授くださいませ。

  • SSIS 変数の値をSQL実行タスクSQLStatementで利用する方法

    初めまして! SSISの変数利用について 教えて頂きたいので よろしくお願いいたします。 SSISの変数に入った値をSQL実行タスクの SQLStatementで利用することは できませんでしょうか? 具体的に何をやりたいかと言いますと データを取り込む為に一時テーブルを使います。 SQL実行タスクで一時テーブルを作成して、 データを取り込み、処理後に一時テーブルを削除します。 素人考えで、もしほぼ同時にパッケージが実行された場合に 一時テーブルの名前がカブっていると不具合の元にならないかと思いました。 そこで、変数の値でテーブル名を動的につけられればと思ったのですが、 変数に入れた値を、 色々調べてみたのですが SQL実行タスクエディタのSQLStatementでどう呼び出せばよいのか分かりません。 例えば、以下のような文で##test_table の部分を変数で指定することはできないのでしょうか? CREATE TABLE ##test_table( [CD] VARCHAR(10), [NAME] VARCHAR(20) ) GO お手数ですが、ぜひ教えてください。 SSISを始めたばかりで 考え方自体がおかしいのかも知れません・・・。 その場合は本当に申し訳ありません どうぞよろしくお願いいたします!

  • SSISにて、一時テーブルを使ったファイルの取り込みがうまく行かない場合がある(その2)

    SQL Server2005 のSSISにて、並列で一時テーブル(##tbl1,##tbl2,##tbl3)を作成し、 その作成した一時テーブルに、同じく並列でフラットファイルデータを取り込む、 といった処理を行っています。 ##tbl1作成 ##tbl2作成 ##tbl3作成    ↓      ↓       ↓ ##tbl1取込 ##tbl2取込 ##tbl3取込 こちらの処理について、実行させると成功するときもあれば、失敗する時もあります。 失敗するときは、 [##tbl1 [38]] エラー : "[dbo].[##tbl1]" の Fastload 行セットを開けませんでした。オブジェクトがデータベース内に存在することを確認してください。 や、 [##tbl2 [38]] エラー : "[dbo].[##tbl2]" の Fastload 行セットを開けませんでした。オブジェクトがデータベース内に存在することを確認してください。 といったエラーになります。 一時テーブル作成処理は成功しているのに、何故このエラーが出るのかが分かりません、、 実際には一時テーブルの作成が完了していないのに、次の処理に移っているのでしょうか・・・? また、この処理を並列ではなく、直列にしてやると、エラーは発生しません。 ##tbl1作成    ↓ ##tbl2作成    ↓ ##tbl3作成    ↓ ##tbl1取込    ↓ ##tbl2取込    ↓ ##tbl3取込 どなたかご存知の方、教えて頂けないでしょうか? 以上、よろしくお願い致します。

  • SQLServer2005のテーブル作成について

    こんにちわ。 いまSQLServer2005Expressをダウンロードして, データベースを作成し,そこにテーブルを作成しようとしています。 そこで「SQLServer Managemant Studio Express」を使用すれば, 一応テーブルを作成することができるのですが, テーブル定義のスクリプトを作成して, OracleのSQL*Plusのようなコマンド機能から実行したいのですが, SQLServerではそれはどの機能にあたるのでしょうか? 教えてください。よろしくお願いします。

  • SSISのフラットファイル取込時のテーブル名について

    SSISにてフラットファイル取り込み、 それをデータアクセスモード「SQLコマンド」にて、 一時テーブルに投入したいのですが、そのような事は可能なのでしょうか? 今まではデータアクセスモードを 「テーブルまたはビュー - 高速読み込み」にて行っていたのですが、 接続マネージャを変更すると事前に一時テーブルを作成しておかないと 設定が出来ないため、この手間を省きたく、「SQLコマンド」にて実施したい と考えました。 どなたか方法をご存知の方、ご教授頂ければ幸いです。

  • T-SQLで一時テーブルの名前を毎回変更できるストアドを作りたい

    お世話になります。 初歩的な質問で恐縮ですがご教示いただければ幸いです。 T-SQLでグローバル一時テーブルの名前を毎回変更できるストアドを作り、Access2003アプリから実行させる予定です。 ストアドに、CREATE TABLE [dbo].[@tablename]のように書き、 ストアド実行時に@tablenameの値を ##ABC のように入力したのですが、テーブルはtempdbではなく、しかもテーブル名は@tablenameでテーブルが作成されてしまいます。 CREATE TABLE [dbo].@tablename のように[]をとると ストアド自体を作成できずエラーになってしまいます。 宜しくお願いします。 create PROCEDURE [dbo].[ストアドプロシージャー名] (@tablename nvarchar(255)) AS BEGIN from SET NOCOUNT ON; CREATE TABLE [dbo].[@tablename] <以下省略>

  • ストアドをまたがるローカル一時テーブル

    SQL Server 2005 でストアドプロシージャ(以降SPと省略) を作成しています。 複数の SP から、構造が同じローカル一時テーブル (テーブル名が # から始まるテーブル) を使用したい為、 CREATE するだけのローカル一時テーブル作成SP、 DROP するだけのローカル一時テーブル削除SPを、 それぞれ作成しました。 次に、ローカル一時テーブルを使用したい SP 内で、 ローカル一時テーブル作成SP を EXECUTE 後、 ローカル一時テーブルに対し、INSERT をしたところで 以下のようなエラーとなります。 ※INSERT の変わりに、SELECT にしてみても同様でした。 メッセージ 208、レベル 16、状態 0、プロシージャ TEST_SP、行 155 オブジェクト名 '#LocalWorkTable' が無効です。 ※TEST_SP とは、ローカル一時テーブルを使用したい SP の名前  #LocalWorkTable とは、ローカル一時テーブルの名前 グローバル一時テーブル (テーブル名が ## から始まるテーブル) に変更すると、正常に動作しましたが、 セッションをまたがって使用させたくないのです。 あと、 ローカル一時テーブル作成SPを使用せずに、 ローカル一時テーブルを使用したい SP 内で、直接 CREATE すれば 正常に動作しましたが、 上記にも書いたように、複数の SP で構造が同じローカル一時テーブル を使用したいので、できれば、別 SP にしたいと考えております。 ストアドをまたがって、ローカル一時テーブルを使用する事は できないのでしょうか?

  • SQLServer7.0の一時テーブルについて

    いまどき、SQLServer7.0でAP開発している者です。 AP内で一時テーブル(#テーブル名、##テーブル名)を使おうと思っていますが、気になることがあります。 一時テーブルは、セッションが切れた時点で、自動的に、SQLServer側が作成した一時テーブルをDROPしてくれるとMSDN等に書かれてあります。 しかし、なんらかの障害がDBサーバとクライアント間で発生して、DROPされずに残ってしまうことはありますでしょうか?明示的にDROP文を発行した方が安全なのでしょうか。

  • SSIS(DTS)パッケージの物理的な格納場所が分かりません

    現在、SQL Server 2005 の エージェントで Business Intelligence Development studio(以下、BIとします)にて 作成したパッケージをスケジューリングして実行したいため、 BI上で、当該パッケージを「****.dtsx のコピーに名前をつけて保存」、 パッケージの場所は「SQL Server」で保存し、 エージェントからパッケージをジョブ登録出来るようにしたところまでは 良いのですが、、、、、 テスト的に作成した不要なパッケージが いくつか残った状態になってしまったため、 (不要なパッケージを)さぁ、削除しよう! と思ったところ、物理的な格納場所が分からないため、 削除が出来ず困っています。 (以下のような階層になっています) SSIS パッケージ ┣ (不要なパッケージ1) ┣ Maintenance Plan ┃ ┗(不要なパッケージ2) ┗ 自身のPC名 ┗(不要なパッケージ3) どなたか、物理的な格納場所がお分かりになる方がいらっしゃいましたら、 ご回答を頂戴できないでしょうか? また、ついでで恐縮なのですが、 パッケージの場所「SSIS パッケージ ストア」で保存した場合の パッケージの物理格納場所も分かりません。。 SSIS パッケージ ┣ File Systems ┗ MSDB こちらも分かる方がいらっしゃったら、併せてご回答頂けると幸甚です。 以上、よろしくお願い申し上げます。

  • SQLの実行速度

    XMLを解析し、テーブル内を検索するシステムを 作成しているのですが、 ストアドプロシージャ内でSQL文を作成し実行するのと ASP.NET などからSQL文を作成して実行するのとでは、 実行速度に差はでるのものなのでしょうか。 ・SQLServer 2005 ・SELECT の対象テーブルは2~3つのテーブルをINNER JOIN して使う。 ・検索対象の列は実行のたびに異なる。 よろしくおねがいします。