sql – 在Sybase ASE中Upsert(更新或插入)?

前端之家收集整理的这篇文章主要介绍了sql – 在Sybase ASE中Upsert(更新或插入)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个应用程序来将数据从Oracle移动到Sybase,并且需要执行更新/插入操作.在Oracle中,我会使用MERGE INTO,但在Sybase中似乎并不可用(反之亦然).我知道这可以用多个语句来完成,但是由于几个原因,我真的试图将它变成一个语句.

有什么建议么?

解决方法

Sybase和DB2非常符合IEC / ISO / ANSI sql标准. MS少一点.

甲骨文根本不符合标准规定(尽管有什么好声明).更重要的是,由于它的局限性,他们用来克服它们的方法是将扩展引入到sql(对于没有限制的其他DBMS来说,这不是必需的).确保客户不要迁移的好方法.

所以对你来说最好的建议是学习在Oracle方面做任何事情的sql Standard方法.第二个(不是第一个)了解Sybases或DB2(或其他)扩展.

sql中不存在“MERGE”和“UPSERT”,它们仅存在于Oracle中.底线是,您必须在两个单独的操作中进行UPDATE和INSERT.

sql中,UPDATE和INSERT适用于单个表;你可能有相当复杂的FROM子句.

对于“MERGE”,这只是一个:

INSERT target ( column_list ) -- we do have defaults
SELECT ( column_list )
    FROM source
    WHERE primary_key NOT IN ( SELECT primary_key FROM target )

更新只是补充:

UPDATE target SET ( target_column = source_column,... )
    FROM source
    WHERE primary_key IN ( SELECT primary_key FROM target )

在UPDATE中,很容易合并WHERE条件并消除子查询(我将其显示给您).

据了解,Oracle在执行子查询(Standard sql)时是深度的.这就是为什么他们拥有所有这些非标准“MERGE”等,其目的是避免标准子查询语法,每个其他DBMS都能轻松执行.

原文链接:https://www.f2er.com/mssql/75163.html

猜你在找的MsSQL相关文章