gpt4 book ai didi

tsql - 什么时候死锁不是死锁?

转载 作者:行者123 更新时间:2023-12-04 16:00:41 25 4
gpt4 key购买 nike

我问这个问题是因为我不时陷入我不明白的僵局。

这是场景:

更新表 A 的存储过程:

UPDATE A
SET A.Column = @SomeValue
WHERE A.ID = @ID

插入临时表 #temp 的存储过程:
INSERT INTO #temp (Column1,Column2)

SELECT B.Column1, A.Column2

FROM B

INNER JOIN A
ON A.ID = B.ID

WHERE B.Code IN ('Something','SomethingElse')

我看到可能有一个锁等待,但我看不到死锁是如何发生的,我是否遗漏了一些明显的东西?

编辑:

我在此处输入的 SP 显然是简化版本,但我使用的是相关列。两个表的结构都是:
CREATE TABLE A (ID IDENTITY
CONSTRAINT PRIMARY KEY,
Column VARCHAR (100))


CREATE TABLE B (ID IDENTITY
CONSTRAINT PRIMARY KEY,
Code VARCHAR (100))

最佳答案

试试这个,因为它的原因锁为表指定了表提示和关键字:

WITH(NOLOCK)

所以对于你的场景,像这样的事情:
    INSERT INTO #temp (Column1,Column2)

SELECT B.Column1, A.Column2

FROM B WITH(NOLCOK)

INNER JOIN A WITH(NOLOCK)
ON A.ID = B.ID

WHERE B.Code IN ('Something','SomethingElse')

看你怎么去。

您也可以为 tsql、sql server 查找表提示,以查看哪一个最适合您。我指定的 NOLCOK 不会导致锁定,并且它会跳过锁定的行,因为其他一些进程正在使用它们,所以如果你不关心你可以使用它。

我不确定临时表,但您也可以将表提示与 INSERT、INSERT INTO WITH(TABLE_HINT) 一起使用。

关于tsql - 什么时候死锁不是死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8791863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com