相关疑难解决方法(0)

选择/插入Upsert的版本:是否有高并发的设计模式?

我想做一个UPSERT的SELECT/INSERT版本.以下是现有代码的模板:

// CREATE TABLE Table (RowID INT NOT NULL IDENTITY(1,1), RowValue VARCHAR(50))

IF NOT EXISTS (SELECT * FROM Table WHERE RowValue = @VALUE)
BEGIN
   INSERT Table VALUES (@Value)
   SELECT @id = SCOPEIDENTITY()
END
ELSE
   SELECT @id = RowID FROM Table WHERE RowValue = @VALUE)
Run Code Online (Sandbox Code Playgroud)

将从许多并发会话中调用该查询.我的性能测试表明它会在特定负载下持续抛出主键违规.

是否有一种高并发方法可以使此查询保持性能,同时仍然避免插入已存在的数据?

t-sql sql-server concurrency design-patterns sql-server-2008

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