小编tos*_*ory的帖子

目标不匹配时如何与更新源合并?

我正在尝试编写一个存储过程,该过程将从临时表中获取新值,将它们合并到一个实际表中,为我提供插入行的 ID,以及与其值匹配的已经存在的行。

现在,从我所看到的来看,MERGE 函数似乎不支持我想要做的事情,除非我做错了(完全有可能,我不是 SQL 专家——.NET)。不管怎样,我今天晚上才真正了解了MERGE,一开始我似乎应该使用它,但它似乎没有我需要的功能,因为我无法获得以前存在的ID,我需要其余的存储过程。我的主要重点是看看我是否可以让它工作,但另一个问题是我需要确保代码处理对将通过 MERGE 运行的存储过程的潜在并发调用。我知道我现在没有锁定在那里,但我只是想让它在这一点上工作。那么,我所拥有的......

设置

DECLARE @Metadata TABLE
(
    MetadataId INT PRIMARY KEY IDENTITY(1,1),
    MetadataTypeId INT,
    MetadataTypeValueId INT
)

INSERT INTO @Metadata 
VALUES
(1,23),(2,32),(2,33),(2,43),(1,24),(3,33),(1,20)

--Original Table Data
SELECT * FROM @Metadata

DECLARE @MergeMetadata TABLE
(
    MetadataId INT,
    MetadataTypeId INT,
    MetadataTypeValueId INT
)

INSERT INTO @MergeMetadata (MetadataTypeId, MetadataTypeValueId)
VALUES
(2,32),(2,35),(3,34),(4,1),(1,23)

--Metadata that needs added and/or ID'd if exists
SELECT * FROM @MergeMetadata

DECLARE @FinalMetadata TABLE
(
    MetadataId INT,
    MetadataTypeId INT,
    MetadataTypeValueId INT
)

INSERT INTO @FinalMetadata (MetadataId, …
Run Code Online (Sandbox Code Playgroud)

sql-server concurrency merge

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

标签 统计

concurrency ×1

merge ×1

sql-server ×1