0

次の式を使用した SQL 実行タスクがあります。

@[User::SQLExportError] + (DT_WSTR,30)@[User::Id]

式は次のように正しく評価されます。

  select count(*) as ErrorTableCount from [myschema].Error 
    where SPName in ('export/INSERT','export/DELETE') and Id = 1000

as ErrorTableCountこの同じ sql タスクで、ResultName が呼び出された単一行の結果セットにキャプチャしたい: ErrorTableCount変数名が呼び出された:User::ErrorTableCount

赤い円/x クロスが表示されます:

There were errors during task validation.

SQL ソースの式を使用することと、結果セットで定義された吹き替えカウント名を含むその式内で競合があるようです。アドバイス/アイデアはありますか?

4

1 に答える 1

7

シナリオでエラーの原因を特定できません。質問に基づいてシナリオを再現しようとしました。この例は、あなたの側で何が違うのかを理解するのに役立つかもしれません.

dbo.Errorという名前の単純なテーブルを作成します

CREATE TABLE [dbo].[Error](
    [Id] [int] NOT NULL,
    [SPName] [varchar](20) NOT NULL
) ON [PRIMARY]
GO

以下のスクリプトを使用して、いくつかのサンプル データをテーブルに入力します。

INSERT INTO dbo.Error (Id, SPName) VALUES 
    (1000, 'export/INSERT'),
    (1000, 'export/DELETE'),
    (1001, 'export/INSERT');
GO

SSIS パッケージで、上記のテーブルがホストされているデータベースに接続するための接続マネージャーまたはデータ ソースを作成します。この例では、OLE DB 接続マネージャーを作成しました。これは、SQL Server データベースの推奨プロバイダーであり、接続マネージャーに Practice という名前を付けたためです。

パッケージに次の変数を作成します。

変数

変数Idの値を 1000 に設定して、SQL 実行タスクで実行するクエリが少なくとも 2 行をフェッチするようにします。

変数SQLExportErrorを次のクエリに設定します。

SELECT COUNT(Id) AS ErrorTableCount FROM dbo.Error WHERE SPName in ('export/INSERT','export/DELETE') AND Id =

変数SQLFetchを選択し、F4 を押してプロパティを表示します。プロパティEvaluateAsExpressionTrueに設定します。Expressionプロパティに対して省略記号ボタンをクリックし、次の式を設定します。

@[User::SQLExportError] + (DT_WSTR,30)@[User::Id]

表現

[SQL 実行タスク] を [制御フロー] タブにドラッグ アンド ドロップします。以下に示すように、SQL 実行タスクの [一般] ページを構成して、式変数に格納された SQL クエリを実行します。

SQL タスクの実行 - 一般

クエリによって返された値を受け入れて変数に格納するように [結果セット] ページを構成します。

SQL タスクの実行 - 結果セット

スクリプト タスクを追加して、変数に格納されている値を表示します。変数を読み取るようにスクリプト タスクを構成するErrorTableCount

スクリプト タスク

次の C# コードをスクリプト タスクに追加します。

public void Main()
{
    MessageBox.Show(String.Format("Value in variable ErrorTableCount: {0}", 
        Dts.Variables["User::ErrorTableCount"].Value), 
        "Execute SQL Task - Single Row");
    Dts.TaskResult = (int)ScriptResults.Success;
} =

スクリプト タスク コード

スクリプト タスク エディターを閉じます。制御フローは次のようになります。

制御フロー

パッケージを実行すると、メッセージ ボックスにカウント2が表示されます。これは、値 1000 に設定された Id を持つサンプル データ内の行数であるためです。

構成の問題点を見つけるのに役立つことを願っています。

パッケージの実行

于 2012-10-31T22:26:59.163 に答える