Merge 当子查询的表达式值大于1时不允许!在SQLServer2008中

Merge 当子查询的表达式值大于1时不允许!在SQLServer2008中,merge,sql-server-2008-r2,diff,Merge,Sql Server 2008 R2,Diff,首先为我的英语感到抱歉 我正在尝试将记录插入表中。。。记录是项目表和临时表之间的差异 我的密码是 insert into pro_updatelog select *, @user_n, GETDATE() from pro where cod = (select cod from (SELECT * FROM pro EXCEPT SELECT

首先为我的英语感到抱歉

我正在尝试将记录插入表中。。。记录是项目表和临时表之间的差异

我的密码是

insert into pro_updatelog 
   select *, @user_n, GETDATE() 
   from pro 
   where cod = (select cod 
                from (SELECT * FROM pro 
                      EXCEPT 
                      SELECT * FROM temp 
                      UNION ALL 
                      SELECT * FROM temp 
                      EXCEPT 
                      SELECT * FROM pro) as T1);
然后合并临时表和原始表

不知道我该怎么办

我想要的是,如果原始表和临时表之间存在任何差异,请将原始值记录到pro_updatelog表中。。。最好只在表中记录更新后的值,但是否记录整行并不重要,但我希望记录更新前的原始值

任何想法都将不胜感激


谢谢

通过使用合并,我成功地做到了这一点。。。无论如何,完成存储过程需要更长的时间,但它可以按我的要求执行->

insert into pro_updatelog
    select * , @user_n, GETDATE() from
        (SELECT * FROM pro
        EXCEPT
        SELECT * FROM temp
        UNION ALL
        SELECT * FROM temp
        EXCEPT
        SELECT * FROM pro) as T1;
merge pro_updatelog as tar
    using pro as sor
    on (tar.cod = sor.cod)
    when matched then
        update set
            tar.cod = sor.cod ,
            tar.name_pr = sor.name_pr ,
            tar.name_pe = sor.name_pe ,
            tar.en = sor.en ,
            tar.ending = sor.ending ,
            tar.b = sor.b ,
            tar.date_p = sor.date_p ,
            tar.nek = sor.nek ,
            tar.date_kh = sor.date_kh ,
            tar.mp = sor.mp ,
            tar.mt = sor.mt ,
            tar.no_p = sor.no_p ,
            tar.mas = sor.mas ,
            tar.mablag = sor.mablag ,
            tar.np = sor.np ,
            tar.nf = sor.nf ,
            tar.nn = sor.nn ,
            tar.hpp1 = sor.hpp1 ,
            tar.hpp2 = sor.hpp2 ,
            tar.hpp3 = sor.hpp3 ,
            tar.hpp4 = sor.hpp4 ,
            tar.hpp5 = sor.hpp5 ,
            tar.hpp6 = sor.hpp6 ,
            tar.hpp7 = sor.hpp7 ,
            tar.hpp8 = sor.hpp8 ,
            tar.hpf1 = sor.hpf1 ,
            tar.hpf2 = sor.hpf2 ,
            tar.hpf3 = sor.hpf3 ,
            tar.hpf4 = sor.hpf4 ,
            tar.hpf5 = sor.hpf5 ,
            tar.hpf6 = sor.hpf6 ,
            tar.hpf7 = sor.hpf7 ,
            tar.hpf8 = sor.hpf8 ,
            tar.mola = sor.mola ,
            tar.name1 = sor.name1 ,
            tar.name2 = sor.name2 ,
            tar.name3 = sor.name3 ,
            tar.name4 = sor.name4 ,
            tar.name5 = sor.name5 ,
            tar.name6 = sor.name6 ,
            tar.mab_t = sor.mab_t ,
            tar.zarib1 = sor.zarib1 ,
            tar.zarib2 = sor.zarib2 ,
            tar.zarib3 = sor.zarib3 ,
            tar.zarib4 = sor.zarib4 ,
            tar.datet1 = sor.datet1 ,
            tar.datet2 = sor.datet2 ,
            tar.grup = sor.grup ,
            tar.mablag1 = sor.mablag1 ,
            tar.cod_g = sor.cod_g ,
            tar.cod_m = sor.cod_m ,
            tar.user_n = @user_n ,
            tar.[date]=getdate();