2017-07-13 77 views
1

我執行,將執行一個存儲過程,將讀取一個表中的記錄,並在目標表插入記錄基礎上,最後插入

繼轉儲記錄的SSIS SQL任務表的聲明我使用以達到

INSERT INTO dbo.GetParties 
    EXEC dbo.getParties_SSIS 

我試圖使存儲過程足夠聰明,這樣,當它被執行的次數第二或正數它檢查目標表的最大和獲取記錄基礎從源表中找到。

如何處理第一次執行存儲過程,因爲目標表中沒有記錄?處理這個問題的最佳方式是什麼?

這是我的程序:

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

你可以用ISNULL或COALESCE很容易解決。

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

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

或'WHERE c.companyId> @lastCompanyId OR @lastCompanyId IS NULL'。畢竟,你假設companyId中沒有負數。 :) –

+0

@TabAlleman但這是一個相對合理的假設。當然,我應該提到的東西。 :) –