WEB开发网
开发学院数据库MSSQL Server 带你深入了解T-SQL的十一种设计模式 阅读

带你深入了解T-SQL的十一种设计模式

 2008-09-04 10:00:41 来源:WEB开发网   
核心提示: 注:因想在加入到基表前处理数据,所以使用INSTEAD OF触发器分析输入并执行插入数据,带你深入了解T-SQL的十一种设计模式(8),即对视图的简单插入被转换为对基表稍微复杂一些的插入, 十、Chain Of Responsibility(职责链) 此模式目标:为避免通过多个对象提供机会

注:因想在加入到基表前处理数据,所以使用INSTEAD OF触发器分析输入并执行插入数据,即对视图的简单插入被转换为对基表稍微复杂一些的插入。

十、Chain Of Responsibility(职责链)

此模式目标:为避免通过多个对象提供机会处理请求,合并请求的发送者与接收者。为实现该模式,必须串联接收对象并沿此链传送请求,直到某个对象处理它。

前面的Conveyor模式已接到责任链模式,这里再作深入讨论。在T-SQL中最接近此模式所描述行为的是嵌套触发器(触发器的执行导致其他触发器激活并实现串联行为的操作)。

create TABLE employee (id int identity ,name varchar(10))
GO
create TABLE laborage (id int ,salary int)
GO
create TABLE laborage2(id int,number int)
GO
insert employee (name) values(’zs’)
insert laborage values(101,101)
insert laborage2 values(101,102)
GO
  create TRIGGER up_employee ON Employee
FOR update
AS
update laborage Set Salary = Salary + 100 where id =101
GO
  create TRIGGER up_laborage ON laborage
FOR update
AS
update laborage2 SET number = number + 200 where id = 101
GO
  update Employee SET Name = ’Zxm’ where id = 1
GO

注:SP_CONFIGURE ’NESTED TRIGGER’,0 可以禁止触发器嵌套,同时触发器最多嵌套32次。从功能角度考虑,在触发器未设定激活顺序情况下,插入请求从一个触发器传送给另一个。在任何情况下,如果其中的任一触发器拒绝插入并回滚事务,则整个操作都将被取消。

十一、COMMAND(命令)

这种模式目标:将请求一个对象来封装,允许你参数化包含不同请求、队列或日志请求的客户端,并支持可撤消操作。在T-SQL中与此模式对应的是事务。

  create PROC prClearLS
@intLsID int
AS
BEGIN TRAN
update Inventory SET Lease = 0 where LsID = @intLsID
  IF @@ERROR <> 0
GOTO PROBLEM
  update LeaseSchedule
SET PeriodTotalAmount = 0
where ScheduleID = @intLsID
  IF @@ERROR <> 0
GOTO PROBLEM
  COMMIT TRAN
RETURN 0
  PROBLEM:
PRINT ’Unable to eliminate lease amounts from the database.’
ROLLBACK TRAN
RETURN 1

上一页  3 4 5 6 7 8 

Tags:深入 了解 SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接