·只有inserted表有数据时,当前操作为insert;·inserted和deleted两张表都有数据时,当前操作为update;·只有deleted表有数据时,当前操作为delete。
1.
CREATE TRIGGER trTask_Update ON dbo.Task
FOR UPDATE
AS
BEGIN
DECLARE @TaskId INT
DECLARE @NewTaskOrder INT
DECLARE @WorkstreamId INT
DECLARE @OldTaskOrder INT
--update
BEGIN
SELECT @TaskId = id ,
@OldTaskOrder = TaskOrder ,
@WorkstreamId = WorkstreamId
FROM deleted
SELECT @NewTaskOrder = TaskOrder
FROM dbo.Task
WHERE Id = @TaskId
--When updating a row, if old value is greater than new value, then +1 all values that are >= the new value and < the old value
IF @OldTaskOrder > @NewTaskOrder
BEGIN
UPDATE dbo.Task
SET TaskOrder = TaskOrder + 1
WHERE WorkstreamId = @WorkstreamId
AND TaskOrder >= @NewTaskOrder
AND TaskOrder < @OldTaskOrder
AND Id <> @TaskId
END
IF @OldTaskOrder < @NewTaskOrder
BEGIN
UPDATE dbo.Task
SET TaskOrder = TaskOrder - 1
WHERE WorkstreamId = @WorkstreamId
AND TaskOrder <= @NewTaskOrder
AND TaskOrder > @OldTaskOrder
AND Id <> @TaskId
END
END
END
2.
CREATE TRIGGER trTask_Insert ON dbo.Task
FOR INSERT
AS
BEGIN
DECLARE @TaskId INT
DECLARE @NewTaskOrder INT
DECLARE @WorkstreamId INT
DECLARE @OldTaskOrder INT
--insert
BEGIN
SELECT @TaskId = id ,
@NewTaskOrder = TaskOrder ,
@WorkstreamId = WorkstreamId
FROM INSERTED
--When inserting a new,+1 to all task orders that are equal to or greater than the newly inserted task's task order
UPDATE dbo.Task
SET TaskOrder = TaskOrder + 1
WHERE WorkstreamId = @WorkstreamId
AND TaskOrder >= @NewTaskOrder
AND Id <> @TaskId
END
END
3.如何调试触发器:
一、打开SQL查询分析器二、将以下Sql语句复制到查询窗口并运行use pubs
CREATE trigger trigger_update on authorsfor updateasbegin print('update lastname=hoho')end
CREATE proc Authors_procInsertas begin update authors set au_lname='HOHO' where au_id='172-32-1176'end
三、在左边的对象浏览器中选择pubs->存储过程在Authors_procInsert(如未出现请刷新pubs数据库)上右击‘Execute stored procedure’,设置参数点击确定打开生成的执行存储过程的脚本 -> 点击SQL Server Management 菜单上的Debug -> Start Debugging...四、当运行到" update authors set au_lname='HOHO' where au_id='172-32-1176'“时按“F11”即进入触发器代码
SQL Server触发器以及如何在SQL Server Manager中调试触发器的更多相关文章
如何在 Visual Studio 2013 中调试.NET Framework 4.5.1 代码
版本需求如标题,在 工具->选项->调试->常规 中,更改以下设置: 禁用:启用“仅我的代码”.逐过程执行属性和运算符(仅限托管).要求源文件与原始版本完全匹配 启用:启用 .NET ...
SQL Server 中的触发器(trigger)
SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...
如何在Sql Server中读取最近一段时间的记录,比如取最近3天的或最近3个月的记录。
如何在Sql Server中读取最近一段时间的记录,比如取最近3天的或最近3个月的记录. 主要用到DATEADD函数,下面是详细语句 取最近3天 select * from 表名where rq> ...
如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?
如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何 ...
如何在SQL Server中生成和使用CRUD存储过程
在本文中,请参阅如何在SQL Server中生成和使用CRUD存储过程. 大多数数据库系统基于缩写CRUD调用的最简单的4种数据操作操作进行操作. 此首字母缩写词代表CREATE,READ,UPDAT ...
如何在SQL Server 2008下轻松调试T-SQL语句和存储过程
一.回顾早期的SQL SERVER版本:早在SQL Server 2000时代,查询分析器的功能还很简陋,远不如VS那么强大.到SQL Server 2005时代,代码高亮.SQL优化等功能逐渐加强, ...
SQL Server数据库性能优化之SQL语句篇【转】
SQL Server数据库性能优化之SQL语句篇http://www.blogjava.net/allen-zhe/archive/2010/07/23/326927.html 近期项目需要, 做了一 ...
一名小小的SQL Server DBA想谈一下SQL Server的能力
一名小小的SQL Server DBA想谈一下SQL Server的能力 百度上暂时还没有搜索到相关的个人写的比较有价值的文章,至少在中文网络的世界里面没有 但是在微软的网站有这样一篇文章:<比 ...
转载——SQL Server数据库性能优化之SQL语句篇
转载自:http://www.blogjava.net/allen-zhe/archive/2010/07/23/326927.html 1. 按需索取字段,跟“SELECT *”说拜拜 字段的提取一 ...
随机推荐
linux中的sticky bit
今天看到有个目录的权限是rwxrwxrwt 很惊讶这个t是什么,怎么不是x或者-呢?搜了下发现: 这个t代表是所谓的sticky bit. sticky bit: 该位可以理解为防删除位. 一个文件是 ...
PHP5.3后在本机运行很慢的解决方法
方法一:这是因为PHP 5.3在面对数据库配置信息中的“localhost”会犹豫,因此直接把这个地址改名为“127.0.0.1”,这个IP是IPv4下面的本地网络地址,实际作用和“localhost ...
Ajax请求过程中显示“进度”的简单实现
Ajax在Web应用中使用得越来越频繁.在进行Ajax调用过程中一般都具有这样的做法:显示一个GIF图片动画表明后台正在工作,同时阻止用户操作本页面(比如Ajax请求通过某个按钮触发,用户不能频繁点击 ...
How to open .ccproj in VS2010?
Q: How to open .ccproj projects types in VS2010, ccproj file type is a Cloud project i suppose. Plea ...
WINIO64位模拟键鼠操作
最近玩游戏有点入迷,心急升级经验,于是某天开始"挂尸体",一系列手动操作之后决定写一个外挂,模拟一系列键盘和鼠标操作,没做过游戏winform也用得少,开始以为只要简单调用winA ...
Custome Buble Data Point
ASP.NET MVC NHibernate 整合 请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ... 谷歌笔试题——排序,只允许0和其他元素交换 2.2 长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的swap,请设计并实现排序. 这题有一个隐含条件:即数组元素是连续的,即0--n-1,当你排好序后,你会发现数组元素和该元素的下标 ...