sql – 在Sybase ASE中Upsert(更新或插入)?
发布时间:2020-12-12 08:51:49 所属栏目:MsSql教程 来源:网络整理
导读:我正在编写一个应用程序来将数据从Oracle移动到Sybase,并且需要执行更新/插入操作.在Oracle中,我会使用MERGE INTO,但在Sybase中似乎并不可用(反之亦然).我知道这可以用多个语句来完成,但是由于几个原因,我真的试图将它变成一个语句. 有什么建议么? 解决方法
我正在编写一个应用程序来将数据从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都能轻松执行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |