如何将此 MySQL 查询编写为 T-SQL

本文关键字:T-SQL 查询 MySQL | 更新日期: 2023-09-27 18:25:22

REPLACE INTO blastersmembers (member_id, name, member_group_id, email, joined,
/*  etc.  */ 

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

如何将此 MySQL 查询编写为 T-SQL

REPLACE INTO或等效项在MS SQL上明确不存在,但您可以先进行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 (...)

信用到:在 SQL Server 上插入更新存储过程

如果您使用的是 SQL Server 2008 及更高版本,则 MERGE 命令可以执行此操作以及更多操作:

-- @member_id,@member_group_id是要匹配的记录的 ID合并冲击波成员作为目标    使用 (选择 @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、名称member_group_id(                   值(source.member_id、名称、source.member_group_id(;

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