【发布时间】:2017-05-06 09:45:59
【问题描述】:
我正在使用以下代码在 SQL Server 中执行MERGE(请原谅我,但我是新手,我无法弄清楚如何通过复制和粘贴正确缩进和格式化我的代码):
MERGE INTO DW_Datawarehouse.[dbo].[DWF_WAREHOUSE] with (HOLDLOCK) AS target
USING #DataSource AS Source
ON target.[DWF_WAREHOUSE_ORDER_NUM] = source.[DWF_WAREHOUSE_ORDER_NUM]
AND target.DWF_WAREHOUSE_ORDER_TYPE_CD = source.DWF_WAREHOUSE_ORDER_TYPE_CD
WHEN MATCHED AND
(
--all non-key fields, attributes and amounts
source.[DWF_WAREHOUSE_ORDER_DESC] <> target.[DWF_WAREHOUSE_ORDER_DESC]
or source.[DWF_WAREHOUSE_PICK_DATE_DAY] <> target.[DWF_WAREHOUSE_PICK_DATE_DAY]
or source.[DWF_WAREHOUSE_DAY_OF_WEEK_NUM] <> target.[DWF_WAREHOUSE_DAY_OF_WEEK_NUM]
or source.[DWF_WAREHOUSE_DIFF_QTY] <> target.[DWF_WAREHOUSE_DIFF_QTY]
)
THEN
UPDATE
SET target.[DWF_WAREHOUSE_ORDER_DESC] = source.[DWF_WAREHOUSE_ORDER_DESC],
target.[DWF_WAREHOUSE_PICK_DATE_DAY] = source.[DWF_WAREHOUSE_PICK_DATE_DAY],
target.[DWF_WAREHOUSE_DAY_OF_WEEK_NUM] = source.[DWF_WAREHOUSE_DAY_OF_WEEK_NUM],
target.[DWF_WAREHOUSE_DIFF_QTY] = source.[DWF_WAREHOUSE_DIFF_QTY]
WHEN NOT MATCHED BY TARGET THEN
INSERT ([DWF_WAREHOUSE_ORDER_DESC], [DWF_WAREHOUSE_PICK_DATE_DAY],
[DWF_WAREHOUSE_DAY_OF_WEEK_NUM], [DWF_WAREHOUSE_DIFF_QTY])
VALUES (source.[DWF_WAREHOUSE_ORDER_DESC], source.[DWF_WAREHOUSE_PICK_DATE_DAY],
source.[DWF_WAREHOUSE_DAY_OF_WEEK_NUM], source.[DWF_WAREHOUSE_DIFF_QTY])
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
我收到错误:
无法将值 NULL 插入“DWF_WAREHOUSE_ORDER_NUM”列, 表 'DW_Datawarehouse.dbo.DWF_WAREHOUSE';列不允许 空值。更新失败。
如何修改我的MERGE 代码以避免此错误?
【问题讨论】:
-
trigger是否在DWF_WAREHOUSE表上。您当前的Merge查询不会产生此错误 -
表示需要为
DWF_WAREHOUSE_ORDER_NUM列指定一个值。您的INSERT声明不包含此列。
标签: sql-server merge insert null sql-insert