T-SQL MERGE - 为什么?

Tah*_*aza 2 t-sql database performance

我不愿意在SQL中使用特定于供应商的语法,因为我宁愿让我们开发平台不可知的解决方案,包括不与关系数据库平台绑定,因为我们喝了Kool-Aid并开始使用并不总是在竞争的供应商平台上有明确的替代品.

我正在考虑的一个这样的声明是MERGE,微软在这里发表文章.

是否有理由使用它?是否有一个性能优势或其他一些你已经发现的证明其使用标准SQL +一IF两个的合理性?

K R*_*ard 5

我喜欢使用合并,因为它将所有内容保存在一起并限制了临时表或临时表的使用.

我有一个使用数据库的应用程序,该数据库每30分钟从另一台服务器提取更新的库存信息.

最简单(最复杂)的解决方案是删除现有数据,然后重新填充整个表.这很糟糕,原因有几个.一些最大的用户可以查看此删除和插入之间的报告并且不获取数据,如果数据拉出问题然后我丢失了所有数据,并且当我只需要更新时我正在更新250,000条记录5000左右.

更好的解决方案是使用insert和update语句(在我的情况下不需要删除).但这样做通常需要临时表,表参数或临时表.我讨厌使用这三个并尽可能地避开它们.

MERGE语句很好,因为我可以执行插入和更新,同时只需要提取源数据一次.语法看起来很疯狂,但是在你写完一些之后它并没有坏.

关于不想使用特定于供应商的语法的评论,我只是不能这样看.我没有看到太多不是特定于供应商的.当然,MERGE与其他数据库中的非常不同,它可能会脱颖而出.然而,它并不像任何东西从一个平台移动到另一个平台,如果没有任何一件事绝对打破每一个重要的方式,只是让它更容易从头开始.嗯,这至少是我个人的经历.每种数据库类型,MS SQL,MySQL,Oracle,DB2,Informix等......它们都有自己特殊的语法规则(如SELECT TOP 1在每个怪异的数据库中看起来都不同),函数,优化技术等等.这不像是一个MERGE,而且在这些转换中会有什么会让你失望,在你处理重写MERGE语句之前很久你就会死定.