2017-07-07 23 views
0

私は100万行弱のテーブルを持っています。 SSISを使用してフォームを構築しています。このフォームでは、ユーザーの入力を求め、その値をパラメータとして使用してソースデータからビューを構築します。 SSISで変数からビューを作成するのに問題があります。パラメータ/変数からビューを動的に作成するSQL SSIS

この「ツール」の目的は、SSISパッケージを実行するフォームを介して定義されたパラメータに基づいて、プログラムによってビューを作成し、後で更新ステートメントを作成するダイアログを提供することです。私のチームの多くの人は0 SQLを知っています。したがって、これはあらゆるSQL知識を迂回します。完全にスタンドアロンのアプリケーションを作成するのは理想的ではありません。これは、私の側で余分なオーバーヘッドが必要となり、同様の結果を得るために現在SSIS/SQLを使用している多くの既存のプロセスから逸脱します。

ここに私が試した/試したことがあります。

私は、このタスクは5つの入力(変数) VAR1、VAR2、VAR3、VAR4、VAR5とフォームが表示されます

'SQLタスクの実行' が含まれているSSISパッケージを持っています。 いくつかのvarsは文字列で、その他は倍精度、intなどです(これらはすべて異なります)

フィールドに値を入力し、大丈夫です。 これらの変数は 'Execute Package Task'に渡されます。 このパッケージ(パッケージB) の中で、varsは 'SQLタスクの実行'で使用されます。

このタスクでは、ユーザーの入力を受け取り、他の4つの変数を含むwhere句を使用してビューを作成しようとしています。

例:

Create View ? AS Select col1,col2,col3,col4 WHERE 
col1 = ? 
AND col2 =? 
AND col3 =?......... 

まずそれが使用していることを表示されますか?作成ビューで無効です。 エラービーイング:私は式としてビュー変数を作成し、どこ文の変数/ paramertersを削除する使用している場合

Error: 0x0 at Build_Query: Incorrect syntax near '@P1'. 
Error: 0xC002F210 at Build_Query, Execute SQL Task: Executing the query "CREATE VIEW ? as Select * from S_t_equip_template 
..." failed with the following error: "The batch could not be analyzed because of compile errors.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established 

correctly. 
Task failed: Build_Query 

、私は、ビューには問題を作成することはできません。私は後ろにそれらを追加した後のステートメントがエラーをスローしかし 私は「SQL実行タスク」で表現としてこれらを評価しようとしましたが、これらは、私はエラーを取得し、様々なタイプがあるとして:。

[Execute SQL Task] Error: Executing the query " 
CREATE VIEW testing AS SELECT 
P.label,P.uniq..." failed with the following error: "The metadata could not 
be determined because statement 'CREATE VIEW testingagain AS SELECT 
P.label,P.uniqueid,C.label as Child_Label,C.uniqueid as Child_uni' does not 
support metadata discovery.". Possible failure reasons: Problems with the 
query, "ResultSet" property not set correctly, parameters not set correctly, 
or connection not established correctly. 

ありません何が起こっているのか。任意の助けを歓迎する

私はエラーを探っていくつかの情報を見つけましたが、他のユースケースは、それが実際の原因や別の回避策を理解することは非常に異なるです。要求された(単純化の例)AS

: 私はパッケージ変数(データ型の文字列)を作成したと呼ばれる:VIEW_NAME

SQL実行タスク:

CREATE VIEW @[User::View_Name] AS SELECT 
* from table1 
where col1 = 100; 

は、具体的にそれは私が使用することを好みません変数はここにあります。 ビュー名をすべて設定すると、次のようになります。変数を含むWhere句に移動します。

タイプ(データ型int型)という変数を作成します

私は私のSQLタスクで変数/パラメータをマップ

例:

CREATE VIEW tempTable AS SELECT 
    * from table1 
    where col1 = ?; 

これは、同じエラーが動作しません。

私は次のエラー

[Execute SQL Task] Error: Executing the query "CREATE VIEW test_45678 AS SELECT P.label,P.uniquei..." failed with the following error: "Must declare the scalar variable "@".". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly. 

は、一般的に、変数に起因した取得された式を経由して上記の操作を行いしようとすると、この方法で評価することはできません。私は個々の作品を個別に評価し、作品を作品ごとに作成する必要があると思います。それは問題ありませんが、非常に非効率的で、保守不能です。

+0

あなたはステップの詳細を表示することができますか? – artm

+0

@artm postは例 – Cjust689

+0

で更新されました。SSISは対話的に使用するためには実際には構築されておらず、通常動的SQLはデータベースの最後の手段です。なぜあなたはこれをやっているのですか?おそらくもっと良い方法があります。あなたのエラーに関して:完全な 'CREATE VIEW'定義を含む変数の中に式を作成して評価した後、それを評価してSSMSで実行して動作を確認した後、 'SQL From Variable' –

答えて

0

私の表現を評価しようとすると、私はいくつかの基本的な誤解を感じました。特に構文の問題と各変数を文字列にキャストする必要があります。 私のSQLStatement変数

ON C.pid = P.ID 
where 
C.width >="+(DT_WSTR, 8)@[User::Width] +"-"+ (DT_WSTR, 8)@[User::Range]+........ 

は、最終的な式はそうのようになります。

"Create View "[email protected][User::View_Name] + " AS SELECT " + @[User::SQLStatement] 
関連する問題