2017-09-05 12 views
1

SSIS初心者はこちらです。ssis temp table exec proc

ウィザードに基づいて作成したSSISパッケージがあります。私は以前に別々に実行していたスクリプトを実行して、プロセスを1ステップに減らすためにSQLタスクを追加しました。このスクリプトは、多くの一時テーブルと最後に1つのグローバル## tempを使用して、プロセスの外部で結果にアクセスできるようにします。

パッケージを実行しようとすると、複雑な「パッケージ検証エラー」(エラーコード0x80040E14)が表示されます。私はエラーメッセージの操作部分は "無効なオブジェクト名 '## roster5'だと思う"

エラーをスローしていたデータフロータスクであることがわかりました。データフロータスクでテーブルが存在することがわかるように、ほかのSQLタスクを作成する前に別のSQLタスクを作成しようとしました。しかし、それでも私に次のエラーが表示されています: "無効なオブジェクト名 '## ROSTER_MEMBER_NEW5'。"

何が間違っていますか/間違っていますか?私は私が知らないことを知らない。これは複雑ではありませんように思えます(初心者の方であれば、これは恐らく何かの複製ですが、他にどのように質問するかは分かりません)。

+0

これにはいくつかの解決策があります。まず、## roster5、## roser)member_news5にいくつの行があるか教えてください。 – plditallo

+0

oops、## roster5はフルネームの略です。スクリプトによって約500万行が作成されています – hmmmmm

+0

#tempテーブルをテーブル変数(たとえば@temptable)に変換する方法があります。オプティマイザは、変数tableを、パフォーマンスに影響を与える単一の行を持つテーブルとして扱います。 set frmt off(https://stackoverflow.com/questions/1579476/using-temp-tables-in-ssis)などの他の提案も表示されます。これもパフォーマンスに影響を与えます。私は、識別可能なスキーマを持つステージングテーブルを作成し、それを移植し、その後切り捨てるときに使用します。 – plditallo

答えて

0

別のオプションは、スタンドアロンT-SQLを実行するSQLエージェントジョブにT-SQLステップを追加することです。元のSSISパッケージのフロー制御を再考し、2つのパッケージに分割する必要があります。最初のSSISパッケージはT-SQLステップの前に必要なすべてを実行し、次のステップは集計に必要な実際のT-SQLを実行し、最後のステップはプロセスを完了する2番目のパッケージを呼び出します。

私は、このアドバイスにはお勧めできない警告が表示されています。何が最も効果的なのはDBAと通信することです。DBAはSSISパッケージを実行するためのサービスアカウントを、プロセスの管理に必要なステージングテーブルを切り捨てるために必要な高い権限で提供することができます。

0

実際には無回答を投稿したいと思います。私は上記のアドバイスに従うように努力しましたが、私はできる限り働いていませんでした。私のスクリプトは実行されていて、データポンプは、基本的には、グローバルtempの内容を別のサーバ/テーブルにコピーすることになっていました。私はこれを2つのステップとして実行し、SSISを使用してすべてを1つのステップで実行しようとしました。実際にSSIS内でコンポーネント間で値を渡す必要はありませんでした。これほど難しいはずはないようです。

いずれにせよ、私は何も働かないと言った。さて、私は何が起こったと思うか教えてください。多くの間違いや、多くの元に戻すこと、失敗した試みの多くをした後、何かが働き始めました。私が貢献すると思うことの1つは、ResultSetTypeをResultSetType_Noneに設定したことです。なぜなら、そのステップの結果を使用しないためです。誰かがそれが起こったことではないと思うなら、私は学びたいから実際のことを聞いてうれしいです。

私は、私が正しいとは少し自信がある、または事故以外の何かによってそれを得たので、これは無回答と見なします。

関連する問題