我正在执行一个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
答案 0 :(得分:1)
您可以使用ISNULL或COALESCE轻松解决问题。
WHERE c.companyId > ISNULL(@lastCompanyId, 0)
或
WHERE c.companyId > COALESCE(@lastCompanyId, 0)