繁体   English   中英

在一条语句中插入和更改

[英]Insert and alter in one statement

我想将一组数据存储到数据库中, 但是如果它是一个预先存在的记录,我想对其进行更改。 否则,请创建一个新的。 是否有合并声明? (谷歌搜索时什么都没有。)

现在,我最好的办法是检查是否已经存在,然后执行其中一项操作。 对我来说似乎很麻烦。

create table Stuff (
  Id int identity(1001, 1) primary key clustered, 
  Beep int unique,
  Boop nvarchar(50))

在MYSQL中:

您可以使用INSERT ... ON DUPLICATE KEY UPDATE。

例如:

INSERT INTO table (a,b,c) VALUES (4,5,6)
  ON DUPLICATE KEY UPDATE c=9;

有关更多信息: http : //dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html

是的,您可以使用pl / sql轻松完成此操作,这是示例代码,可以帮助您http://docs.oracle.com/cd/B10501_01/appdev.920/a96624/01_oview.htm#7106

MySQL使用INSERT... ON DUPLICATE KEY而MSSQL使用MERGE

MERGE 受Azure支持 ,我强烈建议在其上撰写博客文章 ,作为该声明的一个很好的介绍。

这是基于提供的架构的合并语句。

create table #Stuff (
  Id int identity(1001, 1) primary key clustered, 
  Beep int unique,
  Boop nvarchar(50),
  Baap nvarchar(50)
);

INSERT  INTO #Stuff VALUES (1,'boop', 'poop');
INSERT  INTO #Stuff VALUES (2,'beep', 'peep');

SELECT * FROM #STUFF;

MERGE #Stuff 
   USING (VALUES(1,'BeepBeep','PeepPeep')) AS TheNewThing(A,B,C)
     ON #Stuff.Beep = TheNewThing.A
WHEN MATCHED THEN UPDATE SET #Stuff.Boop = TheNewThing.B, #Stuff.Baap = 'fixed'
WHEN NOT MATCHED THEN INSERT (Beep,Boop,Baap) VALUES (
  TheNewThing.A, TheNewThing.B, TheNewThing.C);

SELECT * FROM #STUFF

我还找到了一个非常好的SO Q ,可以进一步阅读

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM