根据最后一次插入将记录插入表中

时间:2017-07-13 14:07:14

标签: sql-server ssis

我正在执行一个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 

1 个答案:

答案 0 :(得分:1)

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

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

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