首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

写了个行锁更新,求斧正

2013-11-08 
写了个行锁更新,求指正环境 mssql2005CREATE PROCEDURE CarToCompany_tbl_LockAdd@CC_ID int,@C_ID int AS

写了个行锁更新,求指正
环境 mssql2005


CREATE PROCEDURE CarToCompany_tbl_LockAdd

@CC_ID int,
@C_ID int
 AS 
Begin
DECLARE @isok  int 
Begin Try 
Begin Transaction 
 
SELECT 
CC_ID,C_ID
 FROM [CarToCompany_tbl] ROWLOCK 
 where CC_ID=@CC_ID  and  C_ID=@C_ID

    if  @@rowcount=0
begin
INSERT INTO [CarToCompany_tbl](
[CC_ID],[C_ID]
)VALUES(
@CC_ID,@C_ID
)
end 

Commit Transaction 
set @isok =1
End Try 
Begin Catch 
Rollback Transaction 
set @isok = -1
print error_number() 
print error_message()
print error_state()
print error_severity() 
End Catch 
return @isok
End 

GO

[解决办法]
不加ROWLOCK应该也可以.
[解决办法]
OK ,我看行。
[解决办法]
需不需要加上这个With(RowLock,UpdLock)?
[解决办法]
毛啊,哪呢?而且还会产生唯一索引冲突。。
[解决办法]
菜鸟提问,MS-SQL不是自动控制锁机制吗,
不需要人为写个锁把
[解决办法]
CREATE PROCEDURE CarToCompany_tbl_LockAdd
 
@CC_ID int,
@C_ID int
 AS 
Begin
DECLARE @isok  int 
Begin Try 
Begin Transaction 
  
    SELECT 
        CC_ID,C_ID
         FROM [CarToCompany_tbl] with(ROWLOCK,Xlock)
         where CC_ID=@CC_ID  and  C_ID=@C_ID
         
    if  @@rowcount=0
    begin
    INSERT INTO [CarToCompany_tbl](
    [CC_ID],[C_ID]
    )VALUES(
    @CC_ID,@C_ID
    )
    end 
     
Commit Transaction 
set @isok =1
End Try 
Begin Catch 
Rollback Transaction 
set @isok = -1
print error_number() 
print error_message()
print error_state()
print error_severity() 
End Catch 
return @isok
End    

这样才有意义, 

热点排行