当前位置: 首页 > 面试题库 >

在SQL Server 2012中使用MERGE插入/更新数据

葛烨
2023-03-14
问题内容

我正在使用SQL Server 2012,并且具有两个结构相同的表。如果表2中还不存在新记录,我想将它们从表1插入表2。

如果它们已经存在,那么我想更新表2中的所有现有记录。

我的表中有大约30列,我想更新所有这些列。

有人可以帮忙吗?我查看了通过互联网发布的各种链接,但完全不了解我的声明的外观。


问题答案:

真的不那么难....

你需要:

  • 源表(或查询)以提供数据
  • 将其合并到的目标表
  • 检查这两个表的条​​件
  • 声明如果找到匹配项(在该条件下)该怎么办
  • 声明如果找不到(在该条件下)匹配该怎么办

因此,基本上,它类似于:

-- this is your TARGET table - this is where the data goes into    
MERGE dbo.SomeTable AS target       
-- this is your SOURCE table where the data comes from 
USING dbo.AnotherTable AS source    
-- this is the CONDITION they have to "meet" on
ON (target.SomeColumn = source.AnotherColumn)

-- if there's a match, so if that row already exists in the target table,
-- then just UPDATE whatever columns in the existing row you want to update
WHEN MATCHED THEN                           
    UPDATE SET Name = source.Name,
               OtherCol = source.SomeCol

-- if there's NO match, that is the row in the SOURCE does *NOT* exist in the TARGET yet,
-- then typically INSERT the new row with whichever columns you're interested in
WHEN NOT MATCHED THEN  
    INSERT (Col1, Col2, ...., ColN)  
    VALUES (source.Val1, source.Val2, ...., source.ValN);


 类似资料:
  • 问题内容: 我只是想将数据插入到SQL数据库表中,如果已经插入了一些数据,那么我想更新该数据。如何使用Java做到这一点。请帮助我,并提前对英语不好表示抱歉。 问题答案: 只需标识数据集中的 唯一项即可 (例如 ID 或 代码 )。然后通过使用该方法首先尝试执行 SELECT 查询。如果 结果集 是空的,执行 INSERT 别的尝试 UPDATE 细节。

  • 问题内容: 我正在做,但是我需要更新部分是有条件的,只有在某些额外条件发生变化时才进行更新。 但是,这是不允许的。有什么解决方法吗? 我无法进行INSERT / UPDATE / SELECT的组合,因为这需要对复制进行处理。 问题答案: 我建议您使用IF()来做到这一点。 参考:条件重复键更新与MySQL

  • 嗨,我已经搜索并试图解决这个问题,但未能找到解决方案,抱歉占用了你的时间。我在laravel中插入一组数据与查询生成器一次插入多个数据。 有没有办法检查表中的值是否存在,然后更新,否则插入。如果所有数据成功更新或插入,我想从查询结果中返回或。我想解决它与laravel查询生成器。谢啦

  • 我有这部分代码: 现在想返回插入或更新的数据作为响应,但是在谷歌上看到很多帖子后,所有尝试都失败了,我怎么能这样做?没有上次插入的id 但返回布尔值: 如何在雄辩的ORM laravel最后插入id 大多数主题想要返回,但我想要所有数据。

  • 问题内容: 假设我使用jQuery将新内容加载到特定的DIV元素中。如果现在我想从该DIV元素内部捕获事件,我认为必须以某种方式更新DOM?处理此问题的最佳方法是什么? 编辑:这是我的意思的示例: 同一级别的文件包含 文件“视图”包含 如果您尝试此操作,则将在您第一次按下Edit时看到该按钮变为View,但之后不再更改。为什么是这样? 问题答案: 像这样使用live:

  • 问题内容: 我有一个这样定义的表 如果和列的值都为,我需要能够引发一个错误,否则我想执行该操作。 这是我尝试过的 但这给了我一个语法错误。也许,我使用的方式是错误的。 我怎样才能正确地添加触发器来验证的数据和? 问题答案: 这看起来像是检查约束的工作,而不是触发器: