Sql 如何在同一时间从表更新和插入到另一个表?
在检查了两个表之后,我试图更新公共值或将它们插入表2中,事实上,我们假设我们有两个表:Sql 如何在同一时间从表更新和插入到另一个表?,sql,sql-server,Sql,Sql Server,在检查了两个表之后,我试图更新公共值或将它们插入表2中,事实上,我们假设我们有两个表: 表A: Id名称登录注销 表B(过滤表) Id名称登录注销 因此,我的目标是将过滤后的数据从表A插入表B(过滤后的登录、注销、消除重复) 这很好,但是我在update语句查询中遇到了一个问题,因此如果我从表B中删除一行,我就不会得到这一行(当我执行包含insert和从表a到表B的更新的存储过程时,再次插入该行。) 这可以通过使用MERGE语句来实现。它可以帮助您处理以下情况: 源表中的记录与目标表中
- 表A: Id名称登录注销
- 表B(过滤表) Id名称登录注销
这可以通过使用
MERGE
语句来实现。它可以帮助您处理以下情况:
- 源表中的记录与目标表中的记录匹配(更新)
- 源表中的记录与目标表中的记录不匹配(插入)
- 在源表中找不到目标表中的记录(删除)
merge
语句?您的IF EXISTS
语句正在检查TableB
和@TableA
中的任何行是否匹配。我希望如此,但问题是当IF EXISTS
找到匹配的第一个元素时,它将更新所有行,这就是我的问题。@Tyron78,你能用merge
语句来回答吗?@Tyron78,非常感谢,merge
语句解决了我的问题
declare @TableA table(Id nvarchar(55),logIn datetime,LogOut datetime)
begin
insert into @TableA(Id,LogIn,LogOut) exec Employee_getfilteredrecords @datefrom, @dateto
if exists(select o.Id from TableB o,@TableA r where r.date=o.date and o.Id=r.Id)
update TableB b set b.id= r.id, logIn = convert(nvarchar(12),cast(r.LogIn as time),120), logout = convert(nvarchar(12),cast(r.LogOut as time),120)
FROM TableB b, @TableA r where b.id= r.id
else
INSERT into TableB (
Id,
logIn,
logOut
)
select Id,convert(nvarchar(12),cast(LogIn as time),120),convert(nvarchar(12),cast(LogOut as time) ,120) from @TableA
end