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. 一步一步重写 CodeIgniter 框架 (6) —— 实现在控制器Controller中加载View

    1. 控制器将模型类获得的数据,传递给视图进行显示,所以视图必须负责接收数据,另外重要的一点是当模型和视图分开后,多个模型的数据可以传递给一个视图进行展示,也可以说一个模型的数据在多个不同的视图中进行 ...

  2. AsyncTask delay延迟执行 或者顺序执行 问题

    惯用AsyncTask的朋友可能会发现AsyncTask的坑: Android executes AsyncTask tasks before Android 1.6 and again as of ...

  3. sharePoint常用命令

    New-SPStateServiceDatabase -Name "StateServiceDatabase" | New-SPStateServiceApplication -N ...

  4. SQL查询重复记录、删除重复记录方法

    查找所有重复标题的记录:SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1 ...

  5. pyfits例子

    下面是一个读入fits文件,画积分强度图,再把某个星表里的天体画到图上的python程序. ====================================================== ...

  6. nm命令

    它用来列出一个目标文件中的各种符号. nm命令还是比较简单而且强大的.它用来列出一个目标文件中的各种符号.符号的种类很多,以下是一些常见的符号类型 nm输出字符 含义 R Read only symb ...

  7. JVM调优总结(八)-典型配置举例2

    常见配置汇总 堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为 ...

  8. centos7安装codeblocks教程

    author:lidabo 装了好多次系统,每次装的时候都有要在网上各种查,太麻烦了.所以决定记录一下,以后用到的时候会方便一些.当然,本文来源于网络,取百家之长,最重要的是本人已验证过,说明对本系统 ...

  9. perl use base 代替 @ISA

    packge Mule; use base ("Horse", "donkey"); # 声明一个超类 它是下面东西的缩写: package Mule; BEG ...

  10. hive regex insert join group cli

    1.insert Insert时,from子句既能够放在select子句后,也能够放在insert子句前,以下两句是等价的 hive> FROM invites a INSERT OVERWRI ...