我正在尝试编写一个存储过程,该过程将从临时表中获取新值,将它们合并到一个实际表中,为我提供插入行的 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)