【问题标题】:How can I write this MySQL query as T-SQL?如何将此 MySQL 查询编写为 T-SQL?
【发布时间】:2013-07-29 22:52:45
【问题描述】:
REPLACE INTO blastersmembers (member_id, name, member_group_id, email, joined,
/*  etc.  */ 

我没有包含整个内容,因为我认为它不相关。如果它不存在,我基本上想插入一行,否则替换现有行。

【问题讨论】:

标签: c# sql


【解决方案1】:

如果您使用的是 SQL Server 2008 及更高版本,the MERGE command 会这样做并且更多:

-- @member_id, @member_group_id 是你要匹配的记录的id 将blastermembers合并为目标 使用 (select @member_id, @member_group_id) 作为源 (member_id, member_group_id) 在 source.member_id = target.member_id 和 source.member_group_id = target.member_group_id 匹配时 更新集名称 = @name -- 等 当不匹配时 插入 (member_id, name, member_group_id) 值(source.member_id,名称,source.member_group_id);

编辑:@swasheck 提到在未打补丁的服务器或旧服务器上使用某些索引视图时的合并问题。这不应阻止您使用 MERGE,这是正确的命令,并且具有不需要事务的优点。

【讨论】:

    【解决方案2】:

    在 MS SQL 上不明确存在 REPLACE INTO 或等效项,但您可以先执行 UPDATE,如果没有更新任何内容,请执行插入。看起来像这样:

    update blastersmembers set name = @name, member_group_id = @member_group_id, email = @email, joined = @joined, ... 
    where member_id = @member_id
    if @@rowcount = 0
    insert into blastersmembers (member_id, name, member_group_id, email, joined, ...) values (...)
    

    归功于:Insert Update stored proc on SQL Server

    【讨论】:

      猜你喜欢
      • 2012-02-29
      • 1970-01-01
      • 2021-01-15
      • 2015-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      相关资源
      最近更新 更多