0

SSIS execute SQL タスクを使用してストアド プロシージャを実行しています。ストアド プロシージャでは、特定の入力値を渡してテーブルに挿入しています。このテーブルには、一意の識別子が主キーとして含まれています。戻り出力として、現在の値が必要です。一意の識別子の。したがって、以下に示すように、変数 @logid に取得しています

INSERT INTO logging.execution_log
            (ParentLogID,
             Description,
             PackageName,
             PackageGuid,
             MachineName,
             ExecutionGuid,
             LogicalDate,
             Operator,
             StartTime,
             EndTime,
             Status,
             FailureTask)
SELECT @ParentLogID,
       @Description,
       @PackageName,
       Cast(@PackageGuid AS UNIQUEIDENTIFIER),
       @MachineName,
       Cast(@ExecutionGuid AS UNIQUEIDENTIFIER),
       @logicalDate,
       @operator,
       Getdate(),
       NULL,
       @status,
       NULL

SET @LogID = Cast(Scope_identity() AS INT) ----@logid is output variable from ssis

しかし、意図した結果が得られません。ここで、グローバル変数の割り当ては、set演算子を使用して @logid に行われ、sql ssis タスク変数を実行するようにマップされています。いくつかの調査の結果、グローバル変数を割り当てるには、SQL クエリの最初のステートメントとしてSET NOCOUNTオプションを ON に設定する必要があることがわかりました。これも実行しましたが、何も返されません....... .ちなみに*なぜこの SET NOCOUNT パラメータを設定する必要があるのですか??? *どんな助けも歓迎

4

3 に答える 3

1

パラメーターがプロシージャー本体で割り当てられた値を返すようにするには、次のように、パラメーターをプロシージャー内でOUT/OUTPUTキーワードを使用して宣言する必要があります。

CREATE PROCEDURE procname (
@logID int OUTPUT,
other parameters
)
AS
body statements

またEXECステートメント内の対応する引数には、次のように同じキーワード (OUTまたはOUTPUT)を指定する必要があります。

EXEC procname @someGlobalVar OUTPUT, other arguments
于 2012-06-15T18:58:25.853 に答える
0

SQL 実行タスクの最後にいつでもSELECT SCOPE_IDENTITY() AS LogID、予想される結果セットを単一の行に設定し、LogID の単一の列で結果を構成し、それを SSIS グローバル変数にマップすることができます。

それを明確にする必要がある場合はお知らせください。

于 2012-06-15T15:34:50.183 に答える
0

Scope_Identity を使用して、Identity 列に使用される uniqueidentifier を取得できます。

uniqueidentifier を取得するには、それを使用する前に変数に割り当てる必要があります

Set @LogID = NewID()

INSERT INTO logging.execution_log VALUES(...., @logID, ...)

uniqueidentifier の意味を誤解している場合を除きます。

ID 列は、整数 1、2、3、4 の自動生成シーケンスであり、Scope_Identity で機能します。

于 2012-06-15T15:40:41.697 に答える