gpt4 book ai didi

asp.net - 不确定用于同步的 SQL Server 锁的类型

转载 作者:行者123 更新时间:2023-12-02 18:23:21 30 4
gpt4 key购买 nike

我有一个 ASP.NET Web 应用程序,它填充 SQL Server 2008 数据库表,如下所示:

INSERT INTO tblName1 (col1, col2, col3)
VALUES(1, 2, 3)

我还有一个单独的服务应用程序,它通过首先重命名该表,然后创建一个空表来处理该表的内容(在后台):

SET XACT_ABORT ON
BEGIN TRANSACTION

--Rename table
EXEC sp_rename 'tblName1', 'temp_tblName1'

--Create new table
CREATE TABLE tblName1(
id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
col1 INT,
col2 INT,
col3 INT
)
COMMIT

SET XACT_ABORT OFF
--Begin working with the 'temp_tblName1' table

我不确定在这种情况下我需要在 tblName1 表上使用哪个 SQL 锁?

PS。为您提供这两个代码示例的运行频率:第一个示例可能每秒运行几次(尽管大多数情况下,频率较低),第二个示例 — 每天运行两次。

最佳答案

正如一些评论所建议的,请考虑采取不同的做法。您可能会受益于使用 snapshot isolation level 。使用快照隔离需要在数据库上将 ALLOW_SNAPSHOT_ISOLATION 设置为 ON。此设置默认处于关闭状态,因此您需要检查是否可以打开它。

一旦您能够使用快照隔离,您就不需要更改 INSERT 语句,但您的其他进程可能会更改为以下内容:

SET XACT_ABORT ON
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRANSACTION

-- Do whatever this process does, but don't rename the table.

-- If you want to get rid of the old records:
DELETE [tblName1] WHERE 1 = 1
-- Then
COMMIT TRANSACTION

如果由于某种原因您确实需要创建新的非临时表,您可能需要在进入事务之前执行此操作,因为在快照隔离期间允许您执行的操作有一些限制。

关于asp.net - 不确定用于同步的 SQL Server 锁的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16126374/

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