我想合并两个没有任何主键的表

时间:2016-02-03 14:10:25

标签: sql-server sql-server-2008

我们无法创建任何其他列 请牢记这一点

这个脚本的全部意图是将数据合并到我的临时表中 当数据匹配时不必做任何事情。 如果#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”   声明

2 个答案:

答案 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