我有一个带有1个唯一键(类型,颜色)的表,但是我想查询一下,如果我要插入重复的键,例如,键入:type_one |颜色:红色,已经有一行,我想更新已经存在但仍要插入的行。
我想更新现有行并继续插入新行。
示例:
查询:
INSERT INTO `table` (`type`, `color`) VALUES ('type_one', 'red') ON DUPLICATED KEY `color` = NULL ... **CONTINUE INSERT**
答案 0 :(得分:0)
我认为这可以帮助您(希望):
create proc checkingduplicate
(@color varchar(12),@typeone varchar(10))
as
if exists (select type, color ,count(*) from
yourtable
group by type,color
having count(*)>1 and color=@color and type=@typeone)
update yourtable set color=null where color in (select color from
yourtable
group by type,color
having count(*)>1 and color=@color and type=@typeone )
insert into yourtable (type, color) values(@color,@typeone)
else
insert into yourtable (type, color) values(@color,@typeone)
go
exec 'red','type_one'
答案 1 :(得分:0)
将其设置为PK:PRIMARY KEY(type, color)
,这将强制color
成为NOT NULL
,或者您还是应该这样做。
然后,将NULLs
存储为彩色,而不是将""
存储为彩色。
这仍然使应用程序有一个问题,即“类型但无颜色”是否有意义。