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

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

 2008-09-04 10:00:41 来源:WEB开发网   
核心提示: 实际应用:禁止一个应用的多个实例连接至服务器 方法1:应用程序锁 --锁定应用程序资源 DECLARE @res intBEGIN TRANexec @res = sp_getapplock @Resource = ’Check Writer’,@LockMode

实际应用:禁止一个应用的多个实例连接至服务器

方法1:应用程序锁

--锁定应用程序资源

DECLARE @res int
BEGIN TRAN
exec @res = sp_getapplock @Resource = ’Check Writer’,@LockMode = ’Exclusive’
--返回到应用程序
--当检测到应用程序时执行以下代码(释放锁资源)
exec @res = sp_releaseapplock @Resource = ’Check Writer’
ROLLBACK TRAN

注:可在启动应用程序时启用一个锁,在关闭时释放该锁。通过以独占方式启用锁,可在释放该锁前禁止运行应用程序的另一个实例。

但这种方法让一个事务长期保持为打开状态。一般来说,不应该长时间或当一个用户被提示输入时让一个事务保持打开状态。

方法2:使用SET CONTEXT_INFO(推荐方法)

IF exists (select * FROM master..sysprocesses where context_info = 0x123456)
RAISERROR(’You Can run only one copy of this application at a time’,20,1) WITH LOG
ELSE
SET CONTEXT_INFO 0x123456

注:使用SET CINTEXT_INFO命令在启动时间向sysprocesses插入一个用户自定义值,每次启动程序时检查该值,如果存在,则包含特定的记号连接已存在,因此产生一个错误并中止自己的连接。如不存在,则将该值保存在sysprocesses中,并继续加载应用。

九、FACADE(外观)

此模式目标:它给位于子系统的一个接口集合提供统一的接口。

在T-SQL中与此模式类似的是包含INSTEAD OF触发器的视图(INSTEAD OF触发器接受对视图的更新,并将它们分配给适当的底层表)。

create TABLE AussieArtists
(ArtistID int identity,
LastName varchar(30),
FirstName varchar(30))
GO
  insert AussieArtists VALUES(’Gibb’,’Barry’)
insert AussieArtists VALUES(’Crowe’,’Russell’)
insert AussieArtists VALUES(’Hogan’,’Paul’)
GO
  create VIEW VAussieArtists
AS
select FirstName + ’’ + LastName AS Name FROM AussieArtists
GO
  create TRIGGER VAussieArtists_insert ON VAussieArtists INSTEAD OF insert
AS
insert AussieArtists(FirstName,LastName)
select LEFT(Name,ISNULL(NULLIF(charINDEX(’ ’,NAME),0),255)-1),
SUBSTRING(Name,NULLIF(charINDEX(’ ’,Name),0)+1,255)
FROM inserted
GO
  insert VAussieArtists(Name) VALUES(’Gerg Ham’)
GO
  select * FROM AussieArtists
GO
drop TABLE AussieArtists
drop VIEW VAussieArtists
GO

上一页  2 3 4 5 6 7 8  下一页

Tags:深入 了解 SQL

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