我们无法创建任何其他列 请牢记这一点
这个脚本的全部意图是将数据合并到我的临时表中 当数据匹配时不必做任何事情。 如果#temp_cqm_class_template_xref中存在某些数据而不是cqm_class_template_xref_temp中的数据,则必须从#temp_cqm_class_template_xref表中删除这些数据
如果是另一种方式,它必须插入#temp_cqm_class_template_xref表
IF OBJECT_ID('tempdb..#temp_cqm_class_template_xref') IS NOT NULL
DROP TABLE #temp_cqm_class_template_xref;
CREATE TABLE #temp_cqm_class_template_xref (
[template_name] [VARCHAR](30) NOT NULL
,[measure_id] [INT] NOT NULL
,[cqm_item_mstr_id] [INT] NOT NULL
,[created_by] [INT] NOT NULL
,[modified_by] [INT] NOT NULL
,[create_timestamp] [DATETIME] NOT NULL
,[modify_timestamp] [DATETIME] NOT NULL
);
MERGE INTO #temp_cqm_class_template_xref AS t
USING cqm_class_template_xref_temp AS s
ON (
t.template_name = s.template_name
AND t.measure_id = s.measure_id
AND t.cqm_item_mstr_id = s.cqm_item_mstr_id
)
WHEN NOT MATCHED
THEN
INSERT (
template_name
,measure_id
,cqm_item_mstr_id
,created_by
,modified_by
,create_timestamp
,modify_timestamp
)
VALUES (
s.template_name
,s.measure_id
,s.cqm_item_mstr_id
,s.created_by
,s.modified_by
,s.create_timestamp
,s.modify_timestamp
)
WHEN NOT MATCHED BY target
THEN
DELETE;
当我运行此脚本时,出现以下错误:
Msg 10711,Level 15,State 1,Procedure ngdev_cqm_class_template_xref_bcp_upld,第88行类型的动作 MERGE的“WHEN MATCHED”条款中不允许“INSERT” 声明
答案 0 :(得分:2)
合并不是一种好的技巧。看到: https://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/
合并很难调试,并且在您尝试合并的数据出现问题时很难维护。不要使用它。
而是使用select而不是values子句编写插入并写入删除。
答案 1 :(得分:1)
您可以尝试类似左连接的内容并找出哪些列为空 在对面的桌子上; 根据你的逻辑,这可能会帮助你
update t
set t.template_name=null,
t.measure_id = null,
t.cqm_item_mstr_id = null
#temp_cqm_class_template_xref t Left join cqm_class_template_xref_temp s on
t.template_name = s.template_name
AND t.measure_id = s.measure_id
AND t.cqm_item_mstr_id = s.cqm_item_mstr_id
delete from #temp_cqm_class_template_xref
where measure_id is null and cqm_item_mstr_id is null and and template_name is null