我们使用(INSERT INTO)在表中插入一条记录,当再次使用时,该记录会创建多条记录。是否有任何方法可以添加记录并交替替换prevoius记录而不添加任何新记录。 我知道这会奏效:
UPDATE Customers
SET ContactName='Alfred Schmidt', City='Hamburg'
WHERE CustomerName='Alfreds Futterkiste';
但如果没有条件即如果。我们不知道记录,我们只知道列名。有没有办法只填写一条记录并交替替换以前的记录而不创建第二条记录?
答案 0 :(得分:1)
确定...如果记录存在则更新,或者如果记录为零则创建记录是一件非常简单的事情,并且您有一个解决方案。话虽如此,我会做一些与众不同的事情,并按日期跟踪我当天的信息:
-- This is REALLY BASIC, but, just to give you the idea...
CREATE TABLE [dbo].[MessageOfTheDay](
[MessageDate] [date] not null,
[MessageContents] [nvarchar](500) not null,
UNIQUE (MessageDate)
)
declare @MessageContents nvarchar(500), @MessageDate date
set @MessageContents = 'This is the new MOTD!!!'
set @MessageDate = GETDATE()
-- Every day, create a new record and you can keep track of previous MOTD entries...
insert into MessageOfTheDay(MessageDate, MessageContents)
values (@MessageDate, @MessageContents)
-- Get the message for today
select MessageContents from MessageOfTheDay where MessageDate = @MessageDate
-- If you want, you can now create messages for FUTURE days as well:
set @MessageContents = 'This is tomorrow''s MOTD!!!';
set @MessageDate = dateadd(D, 1,GETDATE())
insert into MessageOfTheDay(MessageDate, MessageContents)
values (@MessageDate, @MessageContents)
-- Get tomorrow's message
select MessageContents from MessageOfTheDay where MessageDate = @MessageDate
-- If you aren't necessarily going to have one per day and want to always just show the most recent entry
select MessageContents from MessageOfTheDay order by MessageDate desc limit 1
无论如何,那只是我的$ .02。在某些时候,我打赌你会想要查看你的MOTD的历史,当你这样做时,你会很高兴你有这段历史。此外,这可以更准确地模拟您尝试表示的数据。
答案 1 :(得分:0)
我得到了答案,现在正在工作! 我用过:
INSERT INTO data (a, b, c)
VALUES
('1','2','3')
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b)