2017-07-12 8 views
-2

ファイル名が "Sales_20170331"です。 このファイルからファクトテーブルをロードする必要があります。 テーブルにSale_quarter_date、SaleIdの列があります sales_quarter_dateカラムは、ssisで作成した@FileName変数からロードされています。 今、SSISでexecute sqlタスクを作成して、ファクトテーブルのsales_quarter_date = @FileNameの行を削除する必要があります。 quarter_date!= @FileNameの場合、それらのレコードをロードします。 クエリはSQLタスクの作成とパラメータのマッピング

IF EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[Facttable]') AND type in (N'U') 
AND (SELECT COUNT(*) FROM [dbo].[FactTable]) >0) 

DELETE FROM [dbo].[FactTable] 
WHERE sale_quarter_date = @FileName 

のようなものに見えますが、いくつかのエラーは、クエリにここにありますように見えるはずです。 クエリを修正して、実行SQLタスクを設計してもらえますか?

+0

この「何らかのエラー」は何ですか?どのようなエラーメッセージが表示されますか? – Alex

+0

この特定の@filenameにマップできないキー列に可変可能 – genie

+0

からこの日付を取得しようとしています質問にエラーはありません。問題は他のどこかにあるはずです。 –

答えて

0

実行のために作成した現在のクエリは、 'quarter_date!= FileName'の必要性に対処しません。ここで何ができるかである -

  1. 使用「SQLタスクを実行」とあなたは下記のような既存の販売四半期日付を取得したとのクエリを記述変数sSaleQuarterDate_Existingを作成します。 「単一の行」とセット「のResultSet」と「のResultSet」にdbo.Facttable

    から「SaleQuarterDate」として

    選択最大(SaleQuarterDate)SET-

  2. を結果を割り当てる追加は、今すぐ「データフロータスクを作成しますこれはローディングに使用されます。上記のタスクをこのタスクに接続します。接続をダブルクリックし、評価式を - 式と制約として設定します。式では、@ - [User :: FileName]!= sSaleQuarterDate_Existingという条件を指定します。

  3. 別の「Execute SQL Task」を作成します。これは、条件が一致したときにテーブルから既存のレコードを削除するために使用する必要があるものです。 「手順2」のタスクをこのタスクに接続します。もう一度「ステップ3」と同じ手順を実行しますが、今回は条件を - @ [User :: FileName] == sSaleQuarterDate_Existingに変更します。このタクにはあなたが書いたのと同じ質問があります。

あなたが直面している可能性が高いエラーは、パラメータ名自体です。以下のようにクエリを変更してみてください。

IF EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[Facttable]') AND type in (N'U') 
AND (SELECT COUNT(*) FROM [dbo].[FactTable]) >0) 

DELETE FROM [dbo].[FactTable] 
WHERE sale_quarter_date = ? 

[パラメータマッピング]ウィンドウで、 'FileName'ユーザ変数を割り当ててください。

+0

Karthikようこそありがとうございます。これは助けになりました。私は問題が私はquery.Andで直接パラメータ名を与えていたと思うと今は2つの別々のタスクを持っている代わりに、私はちょうど同じタスクで必要な条件のための削除ステートメントと挿入ステートメントを与え、 – genie

+0

Yw。答えとしてマークすることはできますか?これは未回答の質問を絞り込むのに役立ちます。 – VKarthik

関連する問題