为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:Docker
【CPU】:
【问题描述】*:这两个自带的存储过程怎么改造?
USE [master]
GO
/****** Object: StoredProcedure [sys].[sp_getapplock] Script Date: 2024-10-14 16:13:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [sys].[sp_getapplock] --- 1999/04/14 00:00
@Resource nvarchar (255) = NULL, -- Resource to lock
@LockMode varchar (32), -- Lock mode
@LockOwner varchar (32) = 'Transaction', -- Lock Owner - [D = Transaction]
@LockTimeout int = NULL, -- Lock timeout [D = Session setting]
@DbPrincipal sysname = N'public' -- DB principal to use for name space and permissions
as
declare @mode integer
declare @owner integer
declare @result integer
declare @dbid integer
select @mode =
CASE @LockMode
When ('Shared') Then 3
When ('Update') Then 4
When ('Exclusive') Then 5
When ('IntentExclusive') Then 8
When ('IntentShared') Then 6
Else -1
END
if @mode = -1
begin
raiserror(15625, -1, -1, @LockMode, N'@LockMode')
return (-999)
end
select @owner =
CASE @LockOwner
When ('Transaction') Then 1
When ('Session') Then 3
Else -1
END
if @owner = -1
begin
raiserror(15625, -1, -1, @LockOwner, N'@LockOwner')
return (-999)
end
if @LockTimeout is null
begin
set @LockTimeout = @@LOCK_TIMEOUT
end
select @dbid = db_id ()
if @owner = 1 and @@trancount = 0
begin
raiserror(15626, -1, -1)
return (-999)
end
exec @result = sys.xp_userlock 0, @dbid, @DbPrincipal, @Resource, @mode, @owner, @LockTimeout
return @result
USE [master]
GO
/****** Object: StoredProcedure [sys].[sp_releaseapplock] Script Date: 2024-10-14 16:06:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [sys].[sp_releaseapplock] --- 1999/04/14 00:00
@Resource nvarchar (255) = NULL, -- Resource to unlock
@LockOwner varchar (32) = 'Transaction', -- Lock Owner - [D = Transaction]
@DbPrincipal sysname = N'public' -- DB principal to use for name space and permissions
as
declare @owner integer
declare @result integer
declare @dbid integer
select @owner =
CASE @LockOwner
When ('Transaction') Then 1
When ('Session') Then 3
Else -1
END
if @owner = -1
begin
raiserror(15625, -1, -1, @LockOwner, N'@LockOwner')
return (-999)
end
select @dbid = db_id ()
exec @result = sys.xp_userlock 1, @dbid, @DbPrincipal, @Resource, 0, @owner
return @result
可以使用“行级”或“表级”锁来控制并发访问