簡體   English   中英

SSIS 中的 INSERT/UPDATE 條件拆分工作不正確

[英]INSERT/UPDATE conditional split in SSIS working incorrectly

在發布之前,我為我的特定問題尋找了答案。 沒有找到任何東西。 我在插入和更新的 SSIS 中有一個條件拆分,除了它每次運行時似乎更新 250 多行,無論是否對源進行了更新。 插入工作正常。 但它僅在我對條件拆分“忽略錯誤”時才有效,否則拆分“評估為 NULL,但“條件拆分”需要布爾結果“錯誤出現。 關於如何解決這個問題的任何想法? 我的條件拆分如下所示:

UPDATE = [Copy of ORDER_TYPE] != ORDER_TYPE || [Copy of WEEK] != WEEK || [Copy of GOAL] != GOAL || [Copy of WEEK_START] != WEEK_START || [Copy of WEEK_END] != WEEK_END || [Copy of DIVISION_DESC] != DIVISION_DESC || [Copy of SUB_ORDER_TYPE] != SUB_ORDER_TYPE
INSERT = ISNULL(ID) || ISNULL(WEEK) || ORDER_TYPE == ""

我跟着這個教程。

在這種情況下,我們無法調試正在發生的事情,因為我們無法訪問您的數據、您的包和上述布爾條件的結果。 當遇到這樣的問題時,我所做的是在條件拆分之前添加一個,可能是兩個派生列任務。 第一個我將其稱為DER Action Flags因為我們將為我們應該采取的操作生成布爾條件。

添加列IsInsertIsUpdate並使用上述表達式。 現在將您的派生列連接到條件拆分並替換兩個表達式以僅使用我們新的派生列。 在拆分之前立即添加數據查看器,您可以驗證您的邏輯是否合理。

鑒於您的 UPDATE 表達式的長度,我會在我上面描述的DER Action Flags之前將其分解為派生列中的各個列評估。 將其稱為DER Compute Changed Flags之類的東西,以表明我們正在計算列是否已更改。

在此派生列組件中,您將分解每個列更改檢查,即

  • 已更改_ORDER_TYPE [Copy of ORDER_TYPE] != ORDER_TYPE
  • Changed_WEEK [Copy of WEEK] != WEEK

然后將IsUpdate邏輯簡化為Changed_ORDER_TYPE || Changed_WEEK... Changed_ORDER_TYPE || Changed_WEEK...

現在,數據查看器將向您顯示導致錯誤標記更改的確切條件。 這將問題歸結為這兩個輸入,並且此表達式未按預期進行評估(這是我們可以弄清楚的)

根據您的“忽略錯誤”評論,我假設您有一個帶有 NULL 比較的條件,該條件可能未包含在引用的鏈接中。

由於這是一系列轉換為答案的評論,

那奏效了。 數據查看器顯示我的輸入列之一正在轉換為浮點數,而表數據類型為 int,因此帶小數的值與表中的值不同,因為它們被轉換為 int。 固定的。

未來的讀者,請驗證您的數據類型(雙擊組件外的連接線並選擇 MetaData)是否一致,因為數據轉換規則可能會以意想不到的方式讓您感到驚訝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM