【发布时间】:2011-05-29 07:47:13
【问题描述】:
寻找一些关于 Upsert(插入或如果存在,则更新)过程是否被认为是数据库编程中的不良做法的见解。如果有任何相关性,我会在 SQL Server 中工作。
几个月前,在我工作的一个地方,常驻数据库大师在新编写的数据库编码标准(大部分我同意)中指出,应避免使用 Upsert。
我真的看不出这是什么合乎逻辑的原因,并认为我自己合理地意识到了良好的编程实践。我认为它们对于直接的数据管理很有用,并有助于避免过多的存储过程数量。
寻找一些可以帮助我得出结论的见解/讨论。
谢谢。
针对 cmets 的更新:
我所指的具体上下文是在数据库中创建或更新域实体数据表示。例如,一个“Person”对象作为数据库中“Person”表的表示存在。我只需要一种创建新 Person 或更新现有 Person 的机制。在这里,我可以选择创建一个 Upsert 存储过程,或者创建两个单独的存储过程 - 一个用于更新,一个用于插入。
在任何人看来有什么优点或缺点吗?
【问题讨论】:
-
从 Oracle 的角度来看,请改用 MERGE 语句。
-
MERGE 也存在于 SQL Server 中(我相信 2005+)
标签: mysql sql-server oracle database-design