【问题标题】:Getting return value from stored procedure dynamically in SSIS在 SSIS 中动态获取存储过程的返回值
【发布时间】:2017-11-07 06:55:52
【问题描述】:

我在 ForEach 循环容器中的 SSIS 中执行 SQL 任务中使用了 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。 正确的方法应该是什么,以便我每次都获得不同的返回值。

【问题讨论】:

    标签: sql-server stored-procedures ssis


    【解决方案1】:

    对每个循环容器使用一个,其中有两个执行 sql 任务,第一个用于 [dbo].[insertTm],第二个用于 [dbo].[toinsertTx]。如果[dbo].[insertTm] 的文件名和其他输入详细信息从表中选取,如果文件名和其他详细信息是从文件中选取的,则使用文件枚举器。这将不断更新 [dbo].[insertTm] 的输入变量,并且可以获取具有当前作用域标识的此 SP 的输出并将其传递给第二个 SP。

    【讨论】:

    • 我使用了 ForEach 循环容器和文件枚举器。范围标识的值不是一个一个地获取,而是一次获取,看起来。范围标识只返回一个值,即 3,它是标识的最后一个值。它不是动态返回值,即在每个文件返回不同的身份值之后,例如第一个文件返回 1,第二个文件返回 2,最后一个文件返回 3。
    • 您是否也在循环内部为 SP 使用两个执行任务?
    • 是的,对于每个我使用第一个执行任务的第一个 sp 即 toinsertTm 和第二个用于 toinsertTx sp
    • 我在第一个 sp 中将 3 个变量映射为输入,将 1 个变量映射为输出,并且我使用第一个 sp 的输出变量作为第二个 sp 的输入变量。唯一的问题是我将 FileId 的整个列的值设为 3,但我希望它作为 1 表示第一,2 表示第二,3 表示第三。我没有为第一个过程使用结果集...这是一个问题吗?
    • 我希望第二个 sp 没有错误,您正在使用更新语句,即 update TxRecruitment set FileId=@fileido ,它最终会将所有 fileid 映射到 3,因为最终循环将具有 @ fileido 值为 3。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多