最近有个使用触发器实现对插入数据的某个列做更改的需求,因此整理了Oracle和SQL Server对于此类需求的触发器写法,本文仅提到了Insert触发器。

首先我们创建一张表:

  1. --创建Test
  2. Create table test(id int primary key,name varchar(20),sex varchar(1),status int)

我们的目的是实现新插入的数据满足sex字段为null时就把status设为1的需求,可根据实际需要更改条件。

因此SQL Server的写法为:

  1. Create trigger [dbo].[trg1] on [dbo].[test] for insert
  2. as
  3. Declare c cursor for select id,sex from inserted
  4. Declare @id int
  5. Declare @sex varchar(1)
  6. Open c
  7. FETCH NEXT FROM c INTO @id,@sex
  8. While @@FETCH_STATUS = 0
  9. Begin
  10. if @sex is null
  11. update dbo.test set status=1 where id=@id --这里使用主键进行更新以便效率最大化
  12. FETCH NEXT FROM c INTO @id,@sex
  13. END
  14. CLOSE c
  15. DEALLOCATE c

Oracle的写法为:

  1. Create or replace trigger trg1
  2. before insert on test
  3. referencing new as new old as old
  4. for each row
  5. Begin
  6. if :old.sex is null then
  7. :new.status:=1;
  8. end if;
  9. End trg1;

也可以实现同样的功能。

总结与比较:

我们发现由于Oracle提供了before/after的触发器写法因此实现起来更为简单,而SQL Server只能依靠游标来实现,显然Oracle的实现办法更加简单明了。

但并不是说所有情况下Oracle的语法都更好,某些时候SQL Server的语法也可以实现Oracle触发器很难实现的功能。

触发器实现对插入数据的字段更改 Oracle+SQL Server的更多相关文章

  1. 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)

    原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...

  2. SQLSERVER:大容量导入数据时保留标识值 (SQL Server)

    从MSDN上看到实现大容量导入数据时保留标识值得方法包含三种: MSDN链接地址为:https://msdn.microsoft.com/zh-cn/library/ms178129.aspx 感觉M ...

  3. 转:不在同一个服务器上的数据库之间的数据操作(oracle/sql server的对比)

    如何操做不在同一个数据库中的数据操作: 一.对于SQL server来讲:  1.采用创建链接服务器的方式:    (1).创建链接服务器       exec sp_addlinkedserver  ...

  4. 实时数据引擎系列(五): 关于 SQL Server 与 SQL Server CDC

      摘要:在企业客户里, SQL Server 在传统的制造业依然散发着持久的生命力,SQL Server 的 CDC 复杂度相比 Oracle 较低, 因此标准的官方派做法就是直接使用这个 CDC ...

  5. hibernate在Oracle中插入数据,默认字段被设置为null的问题解决

    参考内容: http://blog.sina.cn/dpool/blog/s/blog_90629d5301014a5w.html 在数据库中一个字段的默认值为1,但是在插入数据后,本来该字段为空,值 ...

  6. 使用sql查询mysql/oracle/sql server/gp数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)

    1,根据数据库类型拼接不同URL /** * 根据类型不同拼接连接的URL * @param dbType 1:mysql.2:oracle.3:sql server.4:gp * @param ip ...

  7. 使用 FTP 迁移 SQL Server 数据_迁移数据_快速入门(SQL Server)_云数据库 RDS 版-阿里云

    背景信息 阿里云数据库 SQL Server 版导入数据有如下限制: 仅支持导入 SQL Server 2005.SQL Server 2008.SQL Server 2008R2 版本数据 仅支持全 ...

  8. mysql,oracle,sql server中的默认事务隔离级别查看,更改

    未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据) 已提交读(数据库引擎的默认级别) 可重复读 可序列化(隔离事务的最高级别,事务之间完全隔离) 可串行化比较严谨,级别高; MySQL m ...

  9. SQL server 导入数据 (excel导入到SQL server数据库)

    打开数据库SQL server ,右键数据库,任务,导入数据 点击下一步 选择数据源类型 选择路径,点击下一步 选择将要生成的类型 选择登陆方式 选中,点击下一步 点击编辑映射可以修改将要生成的表,点 ...

随机推荐

  1. Json 使用小结

    关于Json: content={ news_item=[ { title=a, digest=tan for test, content=just for test, content_source_ ...

  2. 前端MVC学习笔记(二)——AngularJS验证、过滤器、指令

    一.验证 angularJS中提供了许多的验证指令,可以轻松的实现验证,只需要在表单元素上添加相应的ng属性,常见的如下所示: <input Type="text" ng-m ...

  3. TreeView控制消息

    控制消息的作用 通过发送消息到Treeview控件, 就能够控机Treeview控件.常用的控制有: 获取被点击的节点 获取节点的文本 设置节点的文本 获取节点的父节点 获取节点的子节点 TVM_GE ...

  4. 传统flv网页视频(flvplayer)--兼容

    1.flv网页视频 项目中需要web打开视频,百度搜了好几个插件,本来是打算用H5 vedio,但是客户的浏览器用的比较老,如果用H5标签的话,IE9以下的浏览器是不支持的.所以费劲又去找了其他插件. ...

  5. SQL2008无法连接到.,及sa登录失败的总结

    尊重别人的劳动成果,我是转载别人的: 本文转载自- 红黑联盟http://www.2cto.com/database/201203/123089.html 出现问题 : 标题: 连接到服务器----- ...

  6. 走迷宫 (nyoj 306)

    学习自此博客题解 二分搜索+深搜.二分枚举最小差距值(路径上的最大值与最小值的差距),枚举的最小值为abs(a[1][1]-a[n][n]),最大值为题目给出的120.搜索时代入这个最小差距值,若存在 ...

  7. java自动装箱的陷阱

    自动装箱和拆箱是java的一颗语法糖,在给我们带来使用便利的同时也带来一些疑惑,请看下面的代码: public class TestClass { public static void main(St ...

  8. GIT 代码管理工具 SourceTree

    什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的 git的起源 作者是Linux之父:Linus Benedict Torval ...

  9. HOOK(钩子)函数

    安装.卸载钩子的相关函数 钩子类型 按功能分: 1.WH_CALLWNDPROC和WH_CALLWNDPROCRET:使你可以监视发送到窗口过程的消息3.WH_DEBUG    调试钩子4.WH_FO ...

  10. 手动为maven的本地仓库添加JAR

    在要添加的jar所在的文件夹下打开黑屏 如添加Oracle的ojdbc6.jar 输入: mvn install:install-file -DgroupId=com.oracle -Dartifac ...