我想做一个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