2017-08-01 20 views
0

ssisでは、この/ *のようにコメントを追加しようとしています。もう一方は* /でコメントを追加しようとしています。SQL実行タスクでのコメント行のSSISマッピング

次のように私は、SQL実行タスクを持っているSQLは次のとおりです。

IF OBJECT_ID('KEY_DWH_RELATIONAL.dbo.PARAM_DIM_CONTACTS') IS NOT NULL 
DROP TABLE KEY_DWH_RELATIONAL.dbo.PARAM_DIM_CONTACTS 

CREATE TABLE KEY_DWH_RELATIONAL.dbo.PARAM_DIM_CONTACTS 
(
PARAM_ContactId INT, 
PARAM_OrganisatoinName NVARCHAR(30), 
PARAM_CurrentFlag BIT DEFAULT 1 
) 

INSERT INTO KEY_DWH_RELATIONAL.dbo.PARAM_DIM_CONTACTS (PARAM_ContactId, PARAM_OrganisatoinName) 




SELECT 
CONTACT.[ContactId] AS [ContactId], 
CONTACT.DATABASE_NAME AS OrganisationName 

FROM dbo.STG_CONTACT_CLIENT AS CONTACT 
inner JOIN dbo.STG_CUSTOMER_ADDRESS_BASE AS CUSTOMER_ADDRESS 
ON CUSTOMER_ADDRESS.ParentId = CONTACT.ContactId 
WHERE CUSTOMER_ADDRESS.AddressNumber = 1 
AND CUSTOMER_ADDRESS.ObjectTypeCode = 'ContactBase' 


? 


AND 




( 



CONTACT.CreatedOn BETWEEN DATEADD(dd, DATEDIFF(dd,66,getdate()), 0) AND DATEADD(dd, DATEDIFF(dd,0,getdate()), 1) 

or 

CONTACT.ModifiedOn BETWEEN DATEADD(dd, DATEDIFF(dd,66,getdate()), 0) AND DATEADD(dd, DATEDIFF(dd,0,getdate()), 1) 

) 


? 

パラメータは、各パラメータの文字列であり、持っている/ *と* /それぞれ。私は0と1としてssisマッピングでそれをマップし、ssisで指定されたパラメータとデータ型をnvarcharとして使用しました。しかし、私は次のようなエラーがあります:エラー:データ型 "DT_WSTR"と "DT_I4"はバイナリ演算子では互換性がありません。

ただし、パラメータは文字列であり、ssisのマッピングはnvarcharに設定されています。これをまったく行うことはできますか?SSISはSelect、WHERE句などの実際のパラメータのみを理解していますか?

+0

パラメータマッピングでNVARCHARの代わりにVARCHARを使用しましたか?あるいは、変数を定義して、 'Declare @ var1 varchar(100);のようにクエリ内に自分のものを置くこともできます。 Set @ var1 =? ' –

+0

このようにパラメータを使用することはできませんが、100%確実ではないことを確信しています。 –

+0

なぜあなたはコメントをマップしますか?これはロギングのためのものですか? – KeithL

答えて

0

SSISパラメータを使用してコードを動的にコメントアウトしたり、クエリを他の方法で「動的」にすることはできません。私は、TSQLの変数が何をすることができるのかは、値を表現することしかできないと思います。

この場合、簡単な回避策があります。あなたはそれをコメントアウトしたくない場合はANDまたは0の後のものをコメントアウトし、これを実行したい場合はいずれか1つのパラメータを持っている:

... 
WHERE CUSTOMER_ADDRESS.AddressNumber = 1 
AND CUSTOMER_ADDRESS.ObjectTypeCode = 'ContactBase' 
AND (
    1=? OR 
    (
     CONTACT.CreatedOn BETWEEN DATEADD(dd, DATEDIFF(dd,66,getdate()), 0) AND DATEADD(dd, DATEDIFF(dd,0,getdate()), 1) 
     or 
     CONTACT.ModifiedOn BETWEEN DATEADD(dd, DATEDIFF(dd,66,getdate()), 0) AND DATEADD(dd, DATEDIFF(dd,0,getdate()), 1) 
    ) 
) 
0

あなたがして、動的SQLで遊ぶことができます実行時に評価される変数。アプローチは以下の通りです:

  • 文字列変数AdditionalConditionを作成し、NULLに設定するプロパティEvaluateAsExpression=trueで変数SqlCommandオブジェクト文字列を作成し、

    "<Your SQL Start> ... AND CUSTOMER_ADDRESS.ObjectTypeCode = 'ContactBase' " + 
    @[User::AdditionalCondition] + " <your SQL continued>" 
    
  • のようなものにその発現を設定しますまたはフローの条件に基づいて値" AND <your condition> "

  • 実行SQLタスクでは、変数背後コマンドソースとしてSqlCommandオブジェクト

作業は次のとおりです - パッケージを使用すると、プログラムされたロジックに基づいて実行時にAdditionalCondition変数を設定します。 SQLコマンドを実行すると、パッケージはと評価されます。SQLCommand変数の挿入AdditionalConditionは変数式で定義されています。

関連する問題