我在SQL Server外觀中的查詢試圖合併只更改記錄,而不是更新每一個記錄,所以我在MATCHED子句之後插入一個簡單的AND語句,除了一件事物。在C#中,我明白你可能必須將變量轉換爲不同類型以便比較它們,但我在SQL中「假設」不是這種情況。源列是數字(19,5),目標是十進制(18,4)。對於我們而言,我並不擔心數據的截斷,最終我將改變目標所以它的將舉行更多即(20,6)合併SQL語句和匹配的記錄轉換
這裏的語句:
WHEN MATCHED
AND (((ISNULL(source.WorkOrderItemNumber,'') != ISNULL(target.WorkOrderItemNumber,''))
OR (ISNULL(CAST(source.WorkOrderQty as DECIMAL(18,4)),0) != ISNULL(target.WorkOrderQty,0)
-- ISNULL(source.WorkOrderQty,0) != ISNULL(target.WorkOrderQty,0)
)
OR (ISNULL(source.WorkOrderBatchQty,0) != ISNULL(target.WorkOrderBatchQty,0)
)))
當我運行上面的語句它做了正確的事情並且不運行相應的更新語句。當我取消註釋第二行並使用它時,它不能正常工作。它會說該記錄不同並運行相應的UPDATE語句。
的WorkOrderBatchQty
工作正常,但它在不同的,我硬編碼0.00000 AS WorkOrderBatchQty
,到語句和目標目的地是十進制(18,4)
我明白爲什麼它的工作原理,但我不明白爲什麼這兩種方式都行不通?在比較值時,我並不認爲SQL使用這種方式。我猜14.00000與14.0000不同,但我不認爲SQL會在意。
由於
你知道,我認爲我滾動對了那個圖的時候我一直在尋找的答案。我知道爲什麼它要求CAST我無法證明它。謝謝! –