sql-server – 存储过程是否锁定表/行?
发布时间:2020-05-25 11:52:11 所属栏目:MsSql 来源:互联网
导读:相当简单的问题.在SQL 2008中,如果我有一个存储过程(见下文),我是否在前两个语句之间存在竞争条件的风险,或者存储过程是否锁定了事务所涉及的事情? ALTER PROCEDURE [dbo].[usp_SetAssignedTo] -- Add the parameters for the stored procedure here @Server
|
相当简单的问题.在SQL 2008中,如果我有一个存储过程(见下文),我是否在前两个语句之间存在竞争条件的风险,或者存储过程是否锁定了事务所涉及的事情? ALTER PROCEDURE [dbo].[usp_SetAssignedTo]
-- Add the parameters for the stored procedure here
@Server varchar(50),@User varchar(50),@UserPool varchar(50)
AS
BEGIN
SET NOCOUNT ON;
Declare @ServerUser varchar(50)
-- Find a Free record
SELECT top 1 @ServerUser = UserName
from ServerLoginUsers
where AssignedTo is null and [TsServer] = @Server
--Set the free record to the user
Update ServerLoginUsers
set AssignedTo = @User,AssignedToDate = getdate(),SourcePool = @UserPool
where [TsServer] = @Server and UserName = @ServerUser
--report record back if it was updated. Null if it was not available.
select *
from ServerLoginUsers
where [TsServer] = @Server
and UserName = @ServerUser
and AssignedTo = @User
END
解决方法你可能会遇到竞争条件.它可以在一个声明中完成: >您可以在UPDATE中进行分配 试试这个……(编辑:holdlock删除) Update TOP (1) ServerLoginUsers WITH (ROWLOCK,READPAST) OUTPUT INSERTED.* SET AssignedTo = @User,SourcePool = @UserPool WHERE AssignedTo is null and [TsServer] = @Server -- not needed -> and UserName = @ServerUser 如果没有,您可能需要单独选择 Update TOP (1) ServerLoginUsers WITH (ROWLOCK,READPAST)
SET
-- yes,assign in an update
@ServerUser = UserName,-- write
AssignedTo = @User,SourcePool = @UserPool
OUTPUT INSERTED.*
WHERE
AssignedTo is null and [TsServer] = @Server -- not needed -> and UserName = @ServerUser
SELECT ...
请看更多:SQL Server Process Queue Race Condition (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql – 如何检查Oracle中的数据库对象是表还是视图
- MSSQL 游标使用 心得
- Redis学习教程之命令的执行过程详解
- sql-server – 选择/插入版本的Upsert:是否有高并发的设计
- sql-server – 什么是阻塞,它是如何发生的?
- sql-server-2008 – SQL Server 2008 SELECT * FROM @varia
- 在T-SQL中运行乘法
- 我应该在多个表上使用sql JOIN关键字进行复杂连接吗?
- SQL Server sql语句将datetime格式的日期转换为yy-mm-dd格式
- sql-server – 为什么SQL Server Managment Studio打开速度
推荐文章
站长推荐
- SQL Server 恢复数据库备份到一个已存在的正在使
- SQL Server 重复数据值只取一条的sql语句
- linq-to-sql – Linq to SQL:为每个页面还是全局
- sql – PLS-00201:必须声明标识符UTIL_FILE
- sql – 在现实生活中笛卡尔连接在哪里?
- 使用外连接时where子句中的’OR’的SQL替代方法
- sql – Oracle是否在错误时回滚事务?
- sql-server-2008 – 将大字段(varbinary(max))复
- SQL Server SQL事务用法begin tran,commit tran
- sql-server – 如何锁定SQL Server数据库以进行更
热点阅读
