【问题标题】:If exist update else insert records in SQL Server 2008 table如果存在更新,则在 SQL Server 2008 表中插入记录
【发布时间】:2011-12-12 23:22:33
【问题描述】:

我有一个暂存表,想将数据插入Main 表,所以我想在将数据从暂存表插入主表时检查,如果存在则更新记录,否则插入为新记录。这里的问题是暂存表和主表都没有任何键列,我可以根据这些键列比较值。

是否可以在两个表上都没有键列,即主键?如果是,请告诉我如何做。

提前致谢。

【问题讨论】:

  • 您的意思是没有在这些表上创建主键,还是没有“逻辑”主键来识别每一行?
  • 我建议您在所有表上都使用唯一标识符,以应对这种情况。没有它们,您将无法安全准确地进行检查。
  • 如果没有可用于比较的列,您如何知道是否应该更新或插入?
  • @Anders UP 这是一个“物理”意义上的数据库表,它是一个在 DBMS 中称为表的对象。但在“逻辑”意义上,它不是一个关系表。 en.wikipedia.org/wiki/Table_%28database%29 - “每一行都由出现在已被标识为候选键的特定列子集中的值标识。”
  • @AndersUP:没有主键的表只是一堆(蒸汽)数据——不是我所说的真实表。 可能对于临时/中间/临时表是可以的,例如用于加载数据 - 但您永久存储的任何内容只需要一个主键......

标签: sql sql-server-2008


【解决方案1】:

如果一行中没有唯一键或一组数据来定义唯一性,则没有。

数据集可以是每一列数据的组合,创建一个部分的总和,这将提供唯一性;但是,您需要在不接触您的数据的情况下做出该决定。

【讨论】:

    【解决方案2】:

    您编写 WHERE 子句以包含使您的记录唯一的所有字段(即决定记录是新的还是应该更新的字段。)

    查看这篇文章 (http://blogs.msdn.com/b/miah/archive/2008/02/17/sql-if-exists-update-else-insert.aspx) 以获取有关如何构建它的提示。

    如果您使用的是 SQL Server 2008r2,您还可以使用 MERGE 语句 - 我没有在没有键的表上尝试过,所以我不知道它是否适合您。

    【讨论】:

      猜你喜欢
      • 2018-10-08
      • 2012-08-08
      • 2021-09-03
      • 2014-02-08
      • 2011-07-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多