2

パッケージ レベルで変数を宣言し、パッケージの制御フローに をcompdateドロップして、変数へのデータ フローをテストしExecute SQL Taskています。

タスクでは、

SQL ステートメント:
select ? = (getdate() - 1)
パラメータ マッピング:
  • 変数名:User::compdate
  • 方向:Output
  • データ・タイプ:DATE
  • パラメータ名:0
  • パラメータ サイズ: -1.

エラーが発生する理由:

[Execute SQL Task] Error: Executing the query "declare @compdate date
set @compdate = (getdate() ..." failed with the following error: "Syntax error or access violation". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
4

2 に答える 2

2

これは他のさまざまな方法で実行できるため、前日を取得するために SQL ステートメントを実行する必要がある理由がわかりません。

ただし、質問に答えるには、SQL実行タスクから SQL クエリの結果を保存しようとしているため、提供した SQL ステートメントを変更する必要があります。

新しいクエリ:

SELECT (GETDATE() - 1) AS DateVar

変数にマップする必要がある、返される単一のパラメーターはどこDateVarになりますか。

パラメータ マッピングは不要なので削除する必要があります。[結果セット] タブを開き、新しい結果を追加します。結果名を に設定DateVarし、変数名を変数に設定します。User::compdate

次に、変数にマップされた [全般] タブで単一行の結果セットを返すように、SQL 実行タスクを設定する必要があります。ResultSetオプションで単一行を選択します。

結果セットの操作については、こちらで詳しく説明されています。「単一行の結果セットの操作」セクションまでスクロールダウンすると、従うことができる優れた例があります。

于 2012-11-08T16:05:01.437 に答える
0

を使用せずに使用したい場合result set。次の手順で試してください。

  1. それぞれのデータベースにストアドプロシージャを作成します。次のコードは例です。

    CREATE proc GetYesterDay(@yesterday datetime output)
    as
    Select @yesterday=getdate()-1
    
  2. ADO.NET接続を作成して、ストアドプロシージャを実行します。その中で、パラメータの入力と出力の方向に言及することができます。

  3. 実行タスクを作成し、次のスクリーンショットのように構成します。 ここに画像の説明を入力してください
  4. パラメータマッピングをクリックし、次のスクリーンショットのように設定します。 ここに画像の説明を入力してください

これで、SSISCompletedDate変数にそれぞれのデータが入力されます。

お役に立てれば!

于 2012-11-09T09:46:09.967 に答える