insert语句:

1.插入单行数据有两种方法:wa是一个工作区

insert into dbtab values wa.

insert into dbtab from wa.

该语句也可以将数据行插入到视图,但是限制是:该视图所有字段必须来自同一个数据库表,而且在数据字典中属性必须设定为可读取及修改read and change,其他数据更新语句也必须遵循该原则。

insert语句操作后,如果相同表中关键字的数据条目已经存在,不能重新插入,只能对该行的非关键字段值进行更改(也可以使用update或者modify)

2.插入多行数据

insert dbtab from table itab.     itab是一个内表,该内表的结构和数据库表的结构一致

如果所有的数据条目均成功插入,则SY-SUBRC=0,如果至少一行数据不能被插入(具有相同表关键字段的值已经存在),则触发运行时错误,而且系统不更新任何数据,使用下列格式可以避免该错误的出现:

insert dbtab from table itab accepting duplicate keys.如果出现关键字相同的条目,系统将SY-subrc=4并跳过该条目,并更新所有其他条目。

UPDATE语句:

1.更新单行数据

update dbtab set f1 = g1 .... f10 = g10  where <fix_key>

update更新的只能是非关键字段,where条件必须是关键字段,为了只更新单行,必须指明所有关键字段的值.

在set语句中,对于数值字段,除f = g外,还可以使用f = f+g、f=f-g两种形式在该字段原有基础上增减

2.更新多行数据

update dbtab set f1 = g1 ..... f10  = g10 where <conditions>.

因为是更新多行数据,所以此处就不需要在where中限定所有表关键字段,该语句本身将更新所有满足条件的数据条目,而不是根据关键字段更新一个数据条目,如果不使用where子句,则将更新当前数据集团中的所有数据行。如果至少有一行数据被更新,SY-subrc返回0,否则返回4.

还可以根据内表来更新多行数据:

update target from table itab.该语句相当于通过工作区的集合来更改数据表,对于每一个内表行,都根据关键字段定位数据表条目,并更改其他字段值,如果所有内表行更新表数据成功,sy-subrc返回0,如果某一行数据没有成功更新(与该关键字段值相同的条目不存在)则返回4.

MODIFY语句:

modify语句是SAP的open sql中专有语句(标准sql语句一般不包含该语句),该语句相当于insert和update语句结合,当使用modify语句操作数据库时,如果程序中指定的数据行已经存在于数据库中(根据表关键字判断)则对其进行更新操作,如果尚存在,则进行插入操作。

引用modify语句的原因在于,有时在进行数据库更新操作时,并不确定数据库中是否已经含有想要的数据行,单insert和update语句要求在操作之前需要首先明确具有相同主关键字段值的数据是否在数据表中已经存在,如果不存在就进行字段update操作,或者对已经存在的数据进行insert操作,都会导致无意义的结果,通过modify,可以让系统辅助程序员进行判断适当的操作.

但是出于性能的考虑,一般情况下只有需有时,才使用modify语句替代update和insert语句。

1.添加或更新单行

modify dbtab from wa.

该语句将工作区wa中的数据内容写入到数据库表中,如果在工作区中指定的主关键字行在数据库表中不存在,则将添加到数据库表中,同用insert语句插入单行所述,如果工作区中指定的主关键字行在数据库表中已经存在,则更改数据库表中相应的行,同update语句更改单行中所述,操作后sy-subrc=0,sy-dbcnt=1.

2.添加或更新多行

modify dbtab from table itab.

内表itab中的数据行将覆盖数据库表中具有相同主关键字的数据条目,若找不到已存在的相同主关键字的数据条目,则将新行添加到数据库表中,对于添加行,该语句等同于使用内表中添加多行操作,对于更改行,该语句等同于使用内表中添加多行操作,对于更改行,该语句等同于使用内表添加多行操作,sy-subrc总返回0,sy-dbcnt =返回内表中的行数

DELETE语句

1.删除单行数据

delete from dbtab where <fix_key>.在where子句中必须指明全部表关键字段的值或者使用语句:delete dbtab from wa.

2.删除多行数据

删除单行数据可以通过where子句进行:

delete from dbtab where <condition>.

该语句将从数据库表中删除所有符合条件的条目,需要注意的是检查内表不要使之为空,因为该操作时无意义的,不会删除任何数据条目,在该操作后,SY-DBCNT中将返回删除行的数目,如果至少删除一行,sy-subrc返回0,如果没有删除任何行,sy-subrc返回4.

通过内表从数据库表中删除多行的语法如下:

delete dbtab [client specified] from table itab.

示例:delete spfili from table it_spfli.如果删除了内表中的所有行,sy-subrc = 0 ,否则返回4,sy-dbcnt返回实际已删除的行数,如果内表为空则sy-subrc和sy-dbcnt都返回0.

3.删除所有数据

如果希望删除所有行可以通过下述两种形式之一的实现:

在通过内表删除多行数据条目的过程中将内表置为空。

使用where field like‘%’ 作为where子句中的唯一条件。

open sql 更新数据的更多相关文章

  1. hibernate通过SQL更新数据

    @Resource(name = "hibernateTemplate") public HibernateTemplate hibernateTemplate; /** * @T ...

  2. 【转】PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理

    [转]PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理 只要有人用了: select t.* from ...

  3. sql server主动推送客户端更新数据

    小谈需求: 最近工作上接到一个需求,做一个web展示数据的报表,最好能实时更新,不限制所用技术. 第一个问题:web服务器推送给浏览器新数据,一开始我想到的最快的最简单的方法就是 在web页面上js轮 ...

  4. 常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释)

    常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释) 一. 增 INSERT INTO 数据表(字段,字段,-) VALUES(值,值-); INSERT INTO emp(empno, ...

  5. SQL批量更新数据

    SQL批量更新数据 step1:导入Excel数据, 具体见百度.注意点:一列中含有float型数据和文本数据的时候,导入要将Excel中的表格属性改成文本,或在数字项目前加个单引号.   step2 ...

  6. 【SQL模板】三.插入/更新 数据模板TSQL

    ---Name: 插入/更新 数据模板.sql ---Purpose: 用于更新 数据库中 历史数据 或 插入 新数据 的脚本模板 ---Author: xx ---Time: 2015-12-18 ...

  7. SQL Server ->> DISABLE索引后插入更新数据再REBUILD索引 和 保留索引直接插入更新数据的性能差异

    之前对于“DISABLE索引后插入更新数据再REBUILD索引 和 保留索引直接插入更新数据的性能差异”这两种方法一直认为其实应该差不多,因为无论如何索引最后都需要被维护,只不过是个时间顺序先后的问题 ...

  8. SQL中使用UPDATE更新数据时一定要记得WHERE子句

    我们在使用 SQL 中的 UPDATE 更新数据时,一般都不会更新表中的左右数据,所以我们更新的数据的 SQL 语句中会带有 WHERE 子句,如果没有WHERE子句,就回更新表中所有的数据,在 my ...

  9. SQL Server通过创建临时表遍历更新数据

    前言: 前段时间新项目上线为了赶进度很多模块的功能都没有经过详细的测试导致了生成环境中的数据和实际数据对不上,因此需要自己手写一个数据库脚本来更新下之前的数据.(线上数据库用是SQL Server20 ...

随机推荐

  1. cocos2dx进阶学习之CCEGLView

    继承关系 CCEGLView-> CCEGLViewProtocol CCEGLView是窗口,在不同平台上有不同的实现,而CCEGLViewProtocol是CCEGLView定义的接口,所以 ...

  2. Pencil OJ 01 开发的准备

    操作系统 ubuntu-12.04.5-desktop-amd64.iso 基本应用 Node 0.12.7 MongoDB 3.0.4 Robomongo 0.8.4 Atom 参考资料 OJ hu ...

  3. Win8.1应用开发之异步编程

    在win8应用商店开发时,我们会遇到很多异步方法.它们存在的目的就是为了确保你的应用在运行须要大量时间的任务时仍能保持良好的响应,也就是说调用异步API是为了响应用户的操作.设想一下我们点击一个But ...

  4. android的事件分发机制理解

    android的事件分发机制理解 1.事件触发主要涉及到哪些层面的哪些函数(个人理解的顺序,可能在某一层会一次回调其它函数) activity中的dispatchTouchEvent .layout中 ...

  5. Mapper XML Files详解

    扫扫关注"茶爸爸"微信公众号 坚持最初的执着,从不曾有半点懈怠,为优秀而努力,为证明自己而活. Mapper XML Files The true power of MyBatis ...

  6. img src某个php文件输出图片(回复更改图片readfile读取图片等)

    在论坛我们经常看到一回复图片就更改等,这功能是怎么实现的呢,其实更验证码道理相同. 新建文件 randimage.php 加入以下代码: <?php $dir='../../images/'; ...

  7. MongoDB系列之二(主动复制)

    目前我正在进行MongoDB的双机热备方面相关的工作.根据我目前看到的MongoDB方面的材料,MongoDB的实际部署有三种方式,分别是“主动复制”,“副本集”以及“分片副本集”. 首先我们从最简单 ...

  8. Ch02 从零开始实例学习3

    提纲:---------------------------- 演练2-3:添加控制器 知识点2-3:控制器的职责 知识点2-4:控制器的类别与方法 ------------------------- ...

  9. Hbiernate关联排序问题

    使用场景: 假设有两张表请求信息.账户表,它们之间是一对多的关系.对应的java类分别为Sfcx_RequestInfo和Sfcx_Zhxx.Sfcx_RequestInfo有一个Set属性 sfcx ...

  10. Android 解屏幕锁与点亮屏幕

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...