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

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

4

2 回答 2

5

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 (...)

归功于:在 SQL Server 上插入更新存储过程

于 2013-07-29T23:53:13.277 回答
2

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

-- @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,这是正确的命令,并且具有不需要事务的优点。

于 2013-07-30T02:36:39.637 回答