Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在同一时间从表更新和插入到另一个表?_Sql_Sql Server - Fatal编程技术网

Sql 如何在同一时间从表更新和插入到另一个表?

Sql 如何在同一时间从表更新和插入到另一个表?,sql,sql-server,Sql,Sql Server,在检查了两个表之后,我试图更新公共值或将它们插入表2中,事实上,我们假设我们有两个表: 表A: Id名称登录注销 表B(过滤表) Id名称登录注销 因此,我的目标是将过滤后的数据从表A插入表B(过滤后的登录、注销、消除重复) 这很好,但是我在update语句查询中遇到了一个问题,因此如果我从表B中删除一行,我就不会得到这一行(当我执行包含insert和从表a到表B的更新的存储过程时,再次插入该行。) 这可以通过使用MERGE语句来实现。它可以帮助您处理以下情况: 源表中的记录与目标表中

在检查了两个表之后,我试图更新公共值或将它们插入表2中,事实上,我们假设我们有两个表:

  • 表A:

    Id名称登录注销

  • 表B(过滤表)

    Id名称登录注销

因此,我的目标是将过滤后的数据从表A插入表B(过滤后的登录、注销、消除重复)

这很好,但是我在update语句查询中遇到了一个问题,因此如果我从表B中删除一行,我就不会得到这一行(当我执行包含insert和从表a到表B的更新的存储过程时,再次插入该行。)


这可以通过使用
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