我想将一组数据存储到数据库中,但如果它是预先存在的记录,我想更改它。否则,创建一个新的。是否有一个组合声明?(谷歌搜索时没有。)
现在,我最好的办法是检查是否已经存在,然后执行其中一项操作。对我来说似乎很麻烦。
create table Stuff (
Id int identity(1001, 1) primary key clustered,
Beep int unique,
Boop nvarchar(50))
我想将一组数据存储到数据库中,但如果它是预先存在的记录,我想更改它。否则,创建一个新的。是否有一个组合声明?(谷歌搜索时没有。)
现在,我最好的办法是检查是否已经存在,然后执行其中一项操作。对我来说似乎很麻烦。
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可能会进一步阅读