Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 合并插入源*_Sql Server_Merge_Implicit Conversion - Fatal编程技术网

Sql server 合并插入源*

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

目前,我们有一个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 Source的子句。*

你的简单想法实际上是荒谬的。 从性能的角度来看,使用*本身就是个坏主意

其次,假设明天的表设计被更改为计算列或默认值,然后插入值Source.*可能根本不起作用,或者可能给出错误的结果

最重要的是,这是不可能的

或者你可以删除合并并使用单独的插入和更新。然后你可以做你想做的