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

首先我们创建一张表:

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

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

因此SQL Server的写法为:

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

Oracle的写法为:

Create or replace trigger trg1
before insert on test
referencing new as new old as old
for each row
Begin
    if :old.sex is null then
    :new.status:=1;
    end if;
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. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  2. 如何成为一名hacker?

    很多人问我如何成为黑客,一般来说我总是会扯一大堆废话,告诉他们要时刻保持好奇心,要学会打破规则挑战权威之类的. 但这类话肯定不是提问者想听的.我揣摩了一下他们的心情,他们想问的应该是这个问题:如何学习 ...

  3. Nginx 防止被域名恶意解析的方法

    今天太倒霉了,发现通过IP无法访问服务器的80端口很无语,昨天都还好的啊,也没有修改过配置,其他端口又是正常的,防火墙也没问题.于是问了下机房,给了个崩溃的回复说我们的服务器有个域名没有备案被电信多次 ...

  4. JSON对象和字符串的转换

    JSON.parse()和JSON.stringify()   1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf& ...

  5. [UWP小白日记-10]程序启动屏(ios解锁既视感)

    讲一下 微软爸爸的开发者大会2016又暴了个表达式动画和Windows.UI.Composition的API,好叼的样子. 官方示例库GitHub 目前是懵逼状态,好复杂.脑细胞已经在地府排队了. ( ...

  6. 详解 UIView 的 Tint Color 属性

    在iOS 7后,UIView新增加了一个tintColor属性,这个属性定义了一个非默认的着色颜色值,其值的设置会影响到以视图为根视图的整个视图层次结构.它主要是应用到诸如app图标.导航栏.按钮等一 ...

  7. 新Mac 开机启动MySQL/MongoDB/Redis 等服务

    在Mac上我们使用[homebrew]包管理工具(http://brew.sh/index_zh-cn.html)来安装和管理开发工具包,例如:mysql.php.redis.只需要一个命令 brew ...

  8. Fiddler的安装设置

    一.安装设置Fiddler2  下载完成后安装,安装完成后打开 如下图设置Fiddler 代理: 二.设置手机代理 快捷键win+r打开运行窗口à输入:cmdà确定 在界面上输入:ipconfig,查 ...

  9. C# 语言规范_版本5.0 (第13章 接口)

    1. 接口 一个接口定义一个协定.实现某接口的类或结构必须遵守该接口定义的协定.一个接口可以从多个基接口继承,而一个类或结构可以实现多个接口. 接口可以包含方法.属性.事件和索引器.接口本身不提供它所 ...

  10. linode更换Linux内核教程(独家)

    Linode服务器性价比高,最低套餐2G内存,享受每月2TB流量,机房40Gb带宽,每月供需10美元(Linode优惠链接).Linode用户创建vps服务器后,可在后台自定义Linux系统版本,包括 ...