【问题标题】:Inserting records into the table based on the last insert根据最后一次插入向表中插入记录
【发布时间】:2017-07-13 22:14:45
【问题描述】:

我正在执行一个 SSIS SQL 任务,该任务将执行一个存储过程并从一个表中读取记录并将记录转储到目标表中

以下是我用来实现这一目标的陈述

INSERT INTO dbo.GetParties 
    EXEC dbo.getParties_SSIS 

我正在尝试使存储过程足够智能,以便当它执行第二次或 n 次时,它会检查目标表的最大值并根据源表中的记录获取记录。

由于目标表中没有记录,我如何处理第一次执行存储过程?最好的处理方法是什么?

这是我的程序:

CREATE PROCEDURE [dbo].[getParties_SSIS]
AS
    DECLARE @lastCompanyId INT 
    SELECT @lastCompanyId = MAX(companyId) FROM GetParties

    SELECT 
        c.companyId, 
        cf.identifierValue dunsId, 
        c.companyName, 
        ct.companyTypeId, ct.companyTypeName,
        cst.companyStatusTypeId, cst.companyStatusTypeName,
        si.simpleIndustryId, si.simpleIndustryDescription,
        ROW_NUMBER() OVER (ORDER BY c.companyId) AS position
    FROM 
        ciqcompany c 
    LEFT JOIN 
        ciqSimpleIndustry si ON si.simpleIndustryId = c.simpleIndustryId 
    LEFT JOIN 
        ciqCompanyType ct ON ct.companyTypeId = c.companyTypeId
    LEFT JOIN 
        ciqCompanyStatusType cst ON cst.companyStatusTypeId = c.companyStatusTypeId
    LEFT JOIN 
        ciqCompanyCrossRef cf ON cf.companyId = c.companyId  
                              AND cf.identifierTypeId = 6 AND cf.primaryFlag = 1
    WHERE   
        c.companyId > @lastCompanyId 

【问题讨论】:

    标签: sql-server ssis


    【解决方案1】:

    您可以使用 ISNULL 或 COALESCE 轻松解决。

    WHERE   c.companyId > ISNULL(@lastCompanyId, 0)
    

    WHERE   c.companyId > COALESCE(@lastCompanyId, 0)
    

    【讨论】:

    • WHERE c.companyId > @lastCompanyId OR @lastCompanyId IS NULL。毕竟,您假设 companyId 中没有负数。 :)
    • @TabAlleman 但这是一个相对合理的假设。我当然应该提到一些事情。 :)
    猜你喜欢
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多