我们遇到了一些死锁的问题,我发布了这个问题.
通过一些帮助和大量搜索自己,我相信我弄清楚发生了什么.为了在不控制锁升级的情况下解决死锁,我需要理解为什么sql server在插入一行时锁定整个表.
这是我的insert语句(带有重命名的变量):
DECLARE
@Type1 INT = 11,
@Type2 INT = NULL,
@Value1 VARCHAR(20) = '0',
@Value2 VARCHAR(20) = '0',
@Value3 VARCHAR(20) = '0',
@Value4 VARCHAR(20) = '0',
@Date1 DATETIME = '2011-11-25',
@Date2 DATETIME = '2011-11-25',
@Value5 NVARCHAR(50) = '',
@Value6 NVARCHAR(50) = '',
@Type3 INT = NULL,
@Value7 VARCHAR(20) = '4',
@Type4 INT = 4,
@Type5 INT = 15153,
@Type6 INT = 3,
@Type7 INT = 31,
@Type8 INT = 5976,
@Type9 INT = 5044,
@Guid1 …Run Code Online (Sandbox Code Playgroud) 我想用 SP 中的 SELECT 语句锁定表中的一些行。我的 SP 中有交易。我想在 BEGIN TRANSACTION 之后锁定我选择的所有行。所以,我想在 COMMIT/ROLLBACK 之后释放这些行。
我尝试过 XLOCK、UPDLOCK、HOLDLOCK,但它们都没有达到我的预期。
这是我的示例代码...
BEGIN TRANSACTION
-- I WANT TO LOCK EMPLOYEES LIVE IN ISTANBULL
SELECT ID FROM EMPLOYEES WITH(XLOCK) WHERE CITY='ISTANBUL'
....
....
....
COMMIT
-- LOCKED ROWS SHOULD BE RELEASED AFTER COMMIT.
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?