毛毛的小窝 — 关注技术交流、让我们一起成长

导航

ASPNETDB-存储过程研究(aspnet_Applications_CreateApplication)

aspnet_Applications_CreateApplication:用于创建角色的申请

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[aspnet_Applications_CreateApplication]'and 

OBJECTPROPERTY(id, N'IsProcedure'= 1)
drop procedure [dbo].[aspnet_Applications_CreateApplication]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

--此存储过程主要是创建申请,并且返回参数
CREATE PROCEDURE [dbo].aspnet_Applications_CreateApplication
    
@ApplicationName      nvarchar(256),
    
@ApplicationId        uniqueidentifier OUTPUT
AS
BEGIN
    
SELECT  @ApplicationId = ApplicationId FROM dbo.aspnet_Applications WHERE LOWER(@ApplicationName= 

LoweredApplicationName
    
--如果没有找到申请名的ID,继续检查
    IF(@ApplicationId IS NULL)
    
BEGIN
        
DECLARE @TranStarted   bit
        
SET @TranStarted = 0

        
--开始事务
        IF@@TRANCOUNT = 0 )
        
BEGIN
            
BEGIN TRANSACTION
            
SET @TranStarted = 1
        
END
        
ELSE
            
SET @TranStarted = 0
    
    
--UPDLOCK:读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK 的优点是允许您读取数据
    --(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。
    --HOLDLOCK 将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。
    --HOLDLOCK 等同于 SERIALIZABLE。 
        SELECT  @ApplicationId = ApplicationId
        
FROM dbo.aspnet_Applications WITH (UPDLOCK, HOLDLOCK)
        
WHERE LOWER(@ApplicationName= LoweredApplicationName

        
IF(@ApplicationId IS NULL)
        
BEGIN
            
SELECT  @ApplicationId = NEWID()
            
INSERT  dbo.aspnet_Applications (ApplicationId, ApplicationName, LoweredApplicationName)
            
VALUES  (@ApplicationId@ApplicationNameLOWER(@ApplicationName))
        
END


        
IF@TranStarted = 1 )
        
BEGIN
            
IF(@@ERROR = 0)
            
BEGIN
            
SET @TranStarted = 0
            
COMMIT TRANSACTION
            
END
            
ELSE
            
BEGIN
                
SET @TranStarted = 0
                
ROLLBACK TRANSACTION
            
END
        
END
    
END
END
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

心得:锁
 --UPDLOCK:读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK 的优点是允许您读取数据
 --(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。
 --HOLDLOCK 将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。
 --HOLDLOCK 等同于 SERIALIZABLE。

posted on 2006-03-01 10:37  mjgforever  阅读(556)  评论(0编辑  收藏  举报