SQL Server触发器以及如何在SQL Server Manager中调试触发器
·只有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 authors
for update
as
begin
print('update lastname=hoho')
end
CREATE proc Authors_procInsert
as
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 *”说拜拜 字段的提取一 ...
随机推荐
- Entity Framework 插入数据 解决主键非自增问题
http://blog.csdn.net/educast/article/details/8632806 与Entity Framework相伴的日子痛并快乐着.今天和大家分享一下一个快乐,两个痛苦. ...
- CheckedListBox与下拉框联动代码
private void yewubind(string id) { //给业务类型下拉框绑定业务类型数据 DataTable dtyewu = sb.SelectLast(id, 0); bool ...
- javascripct字符串
String 对象 String 对象用于处理文本(字符串). 创建 String 对象的语法: new String(s); String(s); 参数 参数 s 是要存储在 String 对象中或 ...
- HBase性能优化方法总结(转)
本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,这里涉及的不多,这部分可以参考:淘宝Ken Wu同学的博客. 1. 表的设计 1.1 Pr ...
- 【JPA】query新对象 需要 构造函数
构造函数 @Query("select g from Note g where id=?1" ) Note findById(Long id); @Query("sele ...
- 成为Java GC专家(3)—如何优化Java垃圾回收机制
为什么需要优化GC 或者说的更确切一些,对于基于Java的服务,是否有必要优化GC?应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但前提是所运行的基于Java的系统,包含了如下参数或 ...
- git 提交
git rebase -i 在使用git开发的时候经常会面临一个常见的问题.多个commit 需要合并为一个完整的commit提交. 合并多个commit为一个完整的commit 我先基于develo ...
- python 文件查找 glob
glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符:"*", "?&quo ...
- JDBC之PreparedStatement模糊查询
今天要做一个关于模糊查询的需求,以前用JDBC做精确查询都是用 "SELECT * FROM test WHERE id = ?",所以用模糊查询时理所当然的也用了"SE ...
- No Pain No Game
hdu4630:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给定一个排序,求区间最大GCD. 题解:离散树状数组.首先把查询按左端点从大到小排序 ...