2017-02-06 16 views
0

私はいくつかの店舗の売上をインポートしており、各店舗にはパラレル・アライアンスを利用するための独自のパッケージがあります。私が各店舗OLE DB Sourceに行って、FROM句を調整して、店舗が別個のデータベース(店舗番号9999のデータベースは[database].[dbo].[sales9999])を持っていることを把握しなければならないので、これを設定するのはむしろ時間がかかることがあります。SSIS SelectとFrom句で変数を使用

また、店舗ごとにSelect句の店舗番号を使用したいと考えています。たとえば、顧客9999の場合、私はSelect 9999 AS StoreKeyを列として持つ必要があります。

そこで私はこのようにしたいのですが:私のOLE DBソースで

SELECT ? as StoreKey, a.saleprice, b.purchasecost 
FROM ? AS a JOIN ? AS b ON a.ID = b.ID 

、および対応するパラメータで?年代と一致します。しかし、これを実装しようとしたときに、私はパラメータがWhere節でのみ使用できるというエラーを受けました。私はそれが必要ではありません。

誰でもアイデアがありますか?

よろしく、

+0

テーブルのデザインが悪く、カラム名またはテーブル名にパラメータを使用することはできません。あなたはデザインを変えることができますか? –

+0

あなたは何をしようとしていますか、そしてその声明の中の「変数」が答えであると思われるのはなぜですか? SSISは、カラム、名前、サイズ、系統など、処理しなければならないメタデータを知らなくても機能しません。各フローは異なります。各テーブルは異なります。 –

+1

*同じフローを使用し、複数のテーブルからデータを読み込む*同一の*メタデータを使用する場合は、変数を使用して式全体を計算できます。 –

答えて

1

あなたは確かに式として評価されている変数の助けを借りてそれを行うことができます。たとえば、SELECT文は、変数のための以下の式のように書くことができます。

"SELECT N'"[email protected][User::strStoreKey]+"' as StoreKey, a.saleprice, b.purchasecost 
    FROM "[email protected][User::strTableName]+" AS a JOIN "[email protected][User::strAnotherTable]+" 
    AS b ON a.ID = b.ID" 

ここでの変数は、式でキャストStringデータ型または型で定義する必要があります。心に
いくつかの重要なポイントこのアプローチを使用:すべてのSelectクエリの

  1. 結果セットは列、その名前とデータ型の観点から、同一である必要があります。
  2. クエリ構築変数にデフォルト値を指定する必要があります。具体的にはstrStoreKey,strTableNamestrAnotherTableとなります。そうしないと、保存時にパッケージの検証が失敗します。
  3. データフローのプロパティは、次のように設定してください。DelayValidation=Trueこれにより、実行前にデータソースまたは宛先が検証され、パッケージのロード時には検証されません。

宛先テーブル名が変数に設定されている場合は、変数宛先でもこの方法を使用できます。同じ制限が適用されます。

+0

返信いただきありがとうございます!それが可能であるべきだと思った。そのNはどういう意味ですか?グーグル "SELECT N .."からN行を返すように見えますか、それとも他の何かが見つかりませんでしたか? – Cenderze

+0

@Cenderze、 'N' ... 'は、引用符内の文字列リテラルがUnicodeであることを意味します。私はSSISパッケージ全体でUnicodeを使用して、デフォルトのコードページの問題への暗黙的な変換を避けることを好みます。 – Ferdipux

関連する問題