我有以下代碼表 A 對 column 有一個檢查約束Denial。
CREATE TABLE Table a
(
[ID] int IDENTITY(1,1) NOT NULL ,
[EntityID] int ,
Denial nVarchar(20)
CONSTRAINT Chk_Denial CHECK (Denial IN ('Y', 'N')),
)
合并宣告
MERGE INTO Table a WITH (HOLDLOCK) AS tgt
USING (SELECT DISTINCT
JSON_VALUE(DocumentJSON, '$.EntityID') AS EntityID,
JSON_VALUE(DocumentJSON, '$.Denial') AS Denial
FROM Table1 bd
INNER JOIN table2 bf ON bf.FileUID = bd.FileUID
WHERE bf.Type = 'Payment') AS src ON tgt.[ID] = src.[ID]
WHEN MATCHED
)) THEN
UPDATE SET tgt.ID = src.ID,
tgt.EntityID = src.EntityID,
tgt.Denial = src.Denial,
WHEN NOT MATCHED BY TARGET
THEN INSERT (ID, EntityID, Denial)
VALUES (src.ID, src.EntityID, src.Denial)
THEN DELETE
運行 MERGE 陳述句時出現此錯誤:
錯誤訊息訊息 547,級別 16,狀態 0,程序 storproctest1,第 40 行 [批處理開始行 0]
MERGE 陳述句與 CHECK 約束“Chk_Column”沖突。沖突發生在資料庫“Test”、表“Table1”和列“Denial”中。該陳述句已終止。
這是由于源檔案具有"Yes"和"No"而不是'Y'和'N'。因此,我收到了上述錯誤。
如何在合并陳述句中使用 Case 陳述句來處理上述檢查約束錯誤?或任何替代解決方案。
uj5u.com熱心網友回復:
在合并資料之前,您可以轉向Yes和Y轉向No。那將屬于合并查詢的子句:N using
USING (
SELECT Distinct
JSON_VALUE(DocumentJSON, '$.EntityID') AS EntityID,
CASE JSON_VALUE(DocumentJSON, '$.Denial')
WHEN 'Yes' THEN 'Y'
WHEN 'No' THEN 'N'
ELSE JSON_VALUE(DocumentJSON, '$.Denial')
END AS Denial
FROM Table1 bd
INNER JOIN table2 bf ON bf.FileUID = bd.FileUID
WHERE bf.Type = 'Payment'
) AS src
該case運算式轉換 Y 和 N 值,而其他值保持不變。由于這適用于源資料集,因此查詢的其余部分(即 theupdate和insert分支)都將受益。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/529367.html
