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();