小编Joh*_*nan的帖子

Merge 语句的锁定选项是什么?

我有一个执行MERGE语句的存储过程。

在执行合并时,它似乎默认锁定整个表。

我在一个事务中调用这个存储过程,我也在做一些其他的事情,我希望它只会锁定受影响的行。

我尝试了提示MERGE INTO myTable WITH (READPAST),它似乎锁定较少。但是ms doc中有一个警告说它可以插入重复的键,甚至绕过主键。

这是我的表架构:

CREATE TABLE StudentDetails
(
StudentID INTEGER PRIMARY KEY,
StudentName VARCHAR(15)
)
GO
INSERT INTO StudentDetails
VALUES(1,'WANG')
INSERT INTO StudentDetails
VALUES(2,'JOHNSON')
GO

CREATE TABLE StudentTotalMarks
(
Id INT IDENTITY PRIMARY KEY,
StudentID INTEGER REFERENCES StudentDetails,
StudentMarks INTEGER
)
GO
INSERT INTO StudentTotalMarks
VALUES(1,230)
INSERT INTO StudentTotalMarks
VALUES(2,255)
GO
Run Code Online (Sandbox Code Playgroud)

这是我的存储过程:

CREATE PROCEDURE MergeTest 
    @StudentId int,
    @Mark int
AS  

WITH Params
AS
(
    SELECT @StudentId as StudentId,
        @Mark …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server merge

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

标签 统计

merge ×1

sql-server ×1

sql-server-2008 ×1