在SSIS中动态获取存储过程的返回值

时间:2017-11-07 06:55:53

标签: sql-server stored-procedures ssis

我在ForEach循环容器中的SSIS中的Execute SQL Task中使用了2个存储过程。从第一个过程我返回值作为scope_identity我想要动态访问第二个存储过程。下面是存储过程。第一个存储过程: -

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 FileId=@fileido
    end

我正确得到的所有东西,我将范围标识的值转换为变量@fileido。我有3个文件,我希望范围标识在每次获取一个文件时返回FileId的值。但我得到的返回值只有一个为3.但我希望将值返回为1然后是2然后是3。 应该采取什么样的正确方法,以便每次都获得不同的返回值。

1 个答案:

答案 0 :(得分:0)

在每个循环容器中使用a,其中包含两个执行sql任务,首先分别用于[dbo]。[insertTm],第二个用于[dbo]。[toinsertTx]。你可以使用For ADO枚举器的每个循环,如果文件名和[dbo]的其他输入详细信息。[insertTm]从表中选取,如果从文件中选取文件名和其他详细信息,请使用文件枚举器。这将继续更新[dbo]。[insertTm]的输入变量,并且可以获取具有当前作用域标识的SP的输出并将其传递给第二个SP。