如何比较两个表列并将其插入SQL Server中的新表存储过程

时间:2014-08-15 15:49:43

标签: sql sql-server procedure

我是SQL Server新手。我想创建一个过程,它应检查两个表并将不同的行插入另一个表。我需要提前感谢一些代码示例。如果行相同,则不要插入else插入。

Table1就像

username product shippeddate
Muha     car1     15.08.2014

Table2就像

username product shippedate
Muha      car1   

3 个答案:

答案 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值,因为它们使用=评估为不相等。在两种情况下,我都没有故障地留下日期比较 - 您需要根据业务规则决定如何处理它们。