2017-11-07 73 views
0

ForEachループコンテナのSSISでExecute SQL Taskに2つのストアドプロシージャを使用しています。最初のプロシージャから私は2番目のストアドプロシージャを動的にアクセスしたいscope_identityとして値を返す.Belowはストアドプロシージャです。最初のストアドプロシージャ: -SSISでストアドプロシージャからの戻り値を動的に取得

ALTER PROCEDURE [dbo].[insertTm] 
     @filename nvarchar(128), 
     @date date, 
     @count int, 
     @fileid int output 
AS 
BEGIN 
     INSERT INTO TmRecruitment(FileName,FileLoadDate,RecordCount) 
     VALUES (@filename, @date, @count) 
     SET @fileid=SCOPE_IDENTITY() 
     RETURN @fileid 
END 
I have created appropriate variables and mapped 3 variables as input and 1 variable as output variable to recieve the value of scope identity. 
Second stored procedure is :- 


ALTER proc [dbo].[toinsertTx] 
    (@fileido int) 
    as 
    begin 
    insert into TxRecruitment 
    (JobReqID,TemplateName,JobType,JobLevel,JobTitle,HeadcountType,Backfill,RequisitionStatus,Status,CurrentApprover,Department,SubDepartment 
    ,CostCenterID,Country,JobPostingLocation,DepartmentHead,SubDeptHead,HiringManager,BudgetController,Recruiter,DateCreated,ApprovedDate 
    ,Age,TimeToReqApproval,NoOfDaysOpen) 
    select * from TsRecruitment 

    update TxRecruitment set [email protected] 
    end 

私が正しく取得しているすべてのものと、変数@fileidoにスコープIDの値を取っています。私は3つのファイルを持っていると私は1つのファイルを取得するたびにFileIdの値を返すスコープのアイデンティティをしたい。しかし、私は戻り値を3にしています。しかし、私は値が1、2、3として返されることを願っています。 これを行う正しい方法は、毎回戻り値を別々に得るためです。

答えて

0

最初に[dbo]。[insertTm]と[dbo]。[toinsertTx]の2つの実行SQLタスクがある各ループコンテナにaを使用します。ADO列挙子の各ループに対してFor [dbo]。[insertTm]のファイル名やその他の入力詳細がテーブルから取得された場合、ファイル名やその他の詳細がファイルから選択された場合は、ファイルの列挙子を使用します。これにより、[dbo]。[insertTm]の入力変数が更新され、現在のスコープIDを持つこのSPの出力をフェッチして2番目のSPに渡すことができます。

+0

私はForEachループコンテナとファイルの列挙子を使用しました。スコープIDの値は1つずつ取り出されるのではなく、一度に取り出されます。スコープ識別情報は、1つの値、すなわち識別情報の最後の値である3を返すだけです。つまり、各ファイルが最初のファイルの場合は1、最後のファイルの場合は2、最後のファイルの場合は3のように、異なる値のアイデンティティを返すたびに値を動的に返しません。 –

+0

ループ内のSPに対して2つの実行タスクも使用していますか? – Kapil

+0

はい、それぞれのために1番目のspすなわちtoinsertTmとtoinsertTx sp –

関連する問題