Sql server 合并插入源*
目前,我们有一个SQL脚本来升级配置设置Sql server 合并插入源*,sql-server,merge,implicit-conversion,Sql Server,Merge,Implicit Conversion,目前,我们有一个SQL脚本来升级配置设置 MERGE [dbo].[ConfigurationSetting] AS Target USING (SELECT * FROM (VALUES -- <Snip> Hard-coded rows. ) AS s([Id], [Key], [DisplayName], [Value])) AS Source ON Target.[Id] = Source.[Id] WHEN MATCHED THEN UPDATE
MERGE [dbo].[ConfigurationSetting] AS Target
USING (SELECT * FROM (VALUES
-- <Snip> Hard-coded rows.
) AS s([Id], [Key], [DisplayName], [Value])) AS Source
ON Target.[Id] = Source.[Id]
WHEN MATCHED THEN
UPDATE SET
[Key] = Source.[Key],
[DisplayName] = Source.[DisplayName]
-- Preserve existing [Value]
WHEN NOT MATCHED BY TARGET THEN
INSERT ([Id], [Key], [DisplayName], [Value])
VALUES (Source.[Id], Source.[Key], Source.[DisplayName], Source.[Value])
WHEN NOT MATCHED BY SOURCE THEN
DELETE
;
这很好,但只是出于我对简单性的渴望,是否有一种语法可以简化
插入价值观类似INSERT VALUES Source的子句。*你的简单想法实际上是荒谬的。 从性能的角度来看,使用*本身就是个坏主意 其次,假设明天的表设计被更改为计算列或默认值,然后插入值Source.*可能根本不起作用,或者可能给出错误的结果 最重要的是,这是不可能的 或者你可以删除合并并使用单独的插入和更新。然后你可以做你想做的