目前我们有一个用于升级配置设置的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 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 ...
条约类似于INSERT VALUES Source.*
答案 0 :(得分:0)
你对简约的看法实际上是荒谬的。
从性能的角度来看,使用" * "
本身就是个坏主意。
其次假设明天的表格设计被改变了计算列或默认值,然后INSERT VALUES Source。*可能根本不起作用或者可能给出错误的结果。
最重要的是,这是不可能的。
或者您可以删除合并并使用单独的插入和更新。然后您可以执行您想要的操作