2017-12-20 15 views
1

Databasesというプロジェクトパラメータがあります。このパラメータは、StringというSSISのProjectパラメータです。自身内の変数は、すなわち:

<dbs> 
    <data> 
     <db>database1</db> 
     <store>store1</store> 
    </data> 
    <data> 
     <db>database2</db> 
     <store>store2</store> 
    </data> 
</dbs> 

をハードコード化されたXMLドキュメントが含まれていると私は、これらのデータベースとそれに対応する店舗を繰り返すSSISでforeach loopでそれを使用しています。

マイforeachループのように構成されている:

DocumentSourceType: Variable 
DocumentSource: $Project::Databases 
EnumerationType: ElementCollection 
OuterXPathStringSourceType: DirectInput 
OuterXPathString: /dbs/* 
InnerElementType: NodeText 
InnerXPathStringSourceType: DirectInput 
InnerXPathString: * 

及びIは、次いでUser::StoreKeyに対応するように可変User::DatabaseNameインデックス1にインデックス0を有することVariable Mappingsを使用して対応します。

は、SSISからパッケージを実行するとになります。

Failed to lock variable "$Project::Databases" for read access with error 0xC0010001 "The variable cannot be found". This occurs when an attempt is made to retrieve a variable from the Variables Collection on a container during execution of the package, and the variable is not there. The Variable name may have changed or the variable is not being created

が、変数する必要があります:私は、これらの値を使用して、SQL文の変数は、私はSQL Agent Jobが、私はエラーを取得する使用して、これを実行しようとすると問題がある正しい出力など

を与えます作成された - それは結局のところハードコーディングされた変数にすぎません。私はこの問題の可能な解決策をGoogleで検索している

はそれをされています:

変数は文字列型ではありません(それは私の場合である

または

ユーザーそこからSQL Agent Jobは正しいアクセス権を持っていないから実行されます(私のケースでは、データを読み込んだデータベースのsysadminによって実行され、msdbとSSISDB)。

+0

どの展開モデルをお使いですか? –

+0

@ digital.aaron Visual Studio SSIS 2016で 'Deploy package ... 'を選択して右クリックするだけで、各パッケージをデプロイできます。別のデプロイメントオプションをテストするための論理的だと思われます。各パッケージの代わりにプロジェクト全体を展開する必要がありますか?私は家から環境にアクセスできないので、現時点ではテストすることができません。 – Cenderze

答えて

1

SSISは、パッケージがProject Deployment Modelを使用して展開されている場合にのみ、Projectパラメータを使用します。パッケージ展開モデルを使用している場合は、プロジェクトパラメータの代わりに構成を使用するようにパッケージを変更する必要があります。

+0

ありがとう!私はこれをテストする方法を見つけ、それは働いた! – Cenderze

関連する問題