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. commoncrawl 源码库是用于 Hadoop 的自定义 InputFormat 配送实现

    commoncrawl 源码库是用于 Hadoop 的自定义 InputFormat 配送实现. Common Crawl 提供一个示例程序 BasicArcFileReaderSample.java ...

  2. YII 路由配置

    伪静态,通过设置server服务,做域名地址的转换工作. urlManager地址美化,通过程序的方式实现地址美化工作. 通过在主配置文件里配置组件来实现: 'components'=>arra ...

  3. http 连接复用

    定义 Http/1.0每次请求都需要建立新的TCP连接,连接不能复用.Http/1.1新的请求可以在上次建立的tcp连接之上发送,连接可以复用. 优点 减少重复进行tcp三次握手的开销,提高效率.注意 ...

  4. Jetty:配置概览-须要配置什么

    上一节讲述了怎么配置Jetty,这节将告诉你使用Jetty你须要配置些什么. 配置Server Server实例是Jetty服务端的中心协调对象,它为全部其它Jetty服务端组件提供服务和生命周期管理 ...

  5. SQLyog 注册码

    用户名: 随意填写 秘钥: ccbfc13e-c31d-42ce-8939-3c7e63ed5417a56ea5da-f30b-4fb1-8a05-95f346a9b20ba0fe8645-3916- ...

  6. 网络授时服务 NTP

    NTP  --- Network Time Protocol 网络授时服务,他解决的主要问题就是实现两台或者多台机器的时间同步问题,而传统的格林尼治时间不是标准的时间,因为地球自转的不是规则的. 网络 ...

  7. maven常见问题汇总

    package阶段得到的是build目录下编译后的类包(jar),install是把这个包和一些maven的元信息(比如pom.xml)复制到本地仓库,assembly一般是把build结果和一些资源 ...

  8. Myeclipse 设定文件的默认打开方式

    Myeclipse 设定文件的默认打开方式.今天下载了一个properties的中文插件,希望.property的文件能默认以这个程序打卡.说一下设置方法. Window -> Preferen ...

  9. 如何使用不同dll的相同namespace下的相同接口

    问题: 程序里加载了2个dll,这2个dll里都声明了同样的命名空间(这个不违法),然后在这个同样的命名空间下,他俩又定义了同名的interface. 然后我程序里直接using这个命名空间,使用这个 ...

  10. Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3

    点击下载代码   http://download.csdn.net/detail/lideguo1979/8291803 新建一个类RouteNavigation,定义getPath()方法.用来获取 ...