我是SQL Server新手。我想创建一个过程,它应检查两个表并将不同的行插入另一个表。我需要提前感谢一些代码示例。如果行相同,则不要插入else插入。
Table1
就像
username product shippeddate
Muha car1 15.08.2014
Table2
就像
username product shippedate
Muha car1
答案 0 :(得分:1)
即使你可以使用"除了"运算符比较2个结果集并插入输出。
select * from table1
except
select * from table2
答案 1 :(得分:0)
如果要检查两个表之间的差异,可以为两者添加唯一索引,并使用SSDT中的数据比较来比较它们。这将为您提供差异的直观表示,如果您愿意,甚至可以生成更新目标表的脚本。
你可以在这里获得SSDT:http://msdn.microsoft.com/en-us/hh297027.aspx 安装完成后,转到SQL>数据比较>新数据比较。
答案 2 :(得分:0)
以下是使用LEFT OUTER JOIN
:
declare @table1 table (username varchar(10), product varchar(10), shippeddate datetime)
declare @table2 table (username varchar(10), product varchar(10), shippeddate datetime)
insert into @table1
select 'Muha','car1','2014-08-15' union
select 'Steve','car2','2014-08-12'
insert into @table2
select 'Muha','car1',null
insert into @table1
select t2.*
from @table2 t2
left outer join @table1 t1
on isnull(t1.username,'') = isnull(t2.username,'')
and isnull(t1.product,'') = isnull(t2.product,'')
and t1.shippeddate = t2.shippeddate
where t1.username is null
select * from @table1
以下是使用NOT EXISTS
的第二个示例。
declare @table1 table (username varchar(10), product varchar(10), shippeddate datetime)
declare @table2 table (username varchar(10), product varchar(10), shippeddate datetime)
insert into @table1
select 'Muha','car1','2014-08-15' union
select 'Steve','car2','2014-08-12'
insert into @table2
select 'Muha','car1',null
insert into @table1
select t2.*
from @table2 t2
where not exists (select * from @table1 t1 where isnull(t1.username,'')=isnull(t2.username,'') and isnull(t1.product,'')=isnull(t2.product,'') and t1.shippeddate=t2.shippeddate)
select * from @table1
在这两种情况下,您都需要认识到NULL值,因为它们使用=
评估为不相等。在两种情况下,我都没有故障地留下日期比较 - 您需要根据业务规则决定如何处理它们。