相关疑难解决方法(0)

SQL Server,插入一行锁定整个表

我们遇到了一些死锁的问题,我发布了这个问题.

通过一些帮助和大量搜索自己,我相信我弄清楚发生了什么.为了在不控制锁升级的情况下解决死锁,我需要理解为什么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)

t-sql sql-server locking insert

11
推荐指数
1
解决办法
2万
查看次数

如何在存储过程中提交事务之前锁定 Sql Server 中的选定行

我想用 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)

有什么建议吗?

sql sql-server stored-procedures transactions

0
推荐指数
1
解决办法
5462
查看次数