导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

非主键的字段如何避免插入重复值?

dalisong 2007-12-30 01:08:33
我有一个表,现有HotelId,CityId,HotelName等字段
HotelId字段是主键标识列,自动生成编号。
要保证同一城市不能有名字相同的酒店,我只知道主键可以避免插入重复值,但CityId,HotelName是普通字段,以这两个字段为条件,怎么才能保证没有重复值。
...全文
140 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dalisong 2007-12-30
谢谢大家的帮忙,学到了新东西,结贴。
回复
wzy_love_sly 2007-12-30
哦,真是
回复
中国风 2007-12-30
create table test
(
HotelId int primary key not null,
CityId int ,
HotelName varchar(50)
constraint U_Test unique(CityId,HotelName)--生成唯一约束时,自动生成唯一索引
)
--或

create table test
(
HotelId int primary key not null,
CityId int ,
HotelName varchar(50)
)

create unique index U_test on test(CityId,HotelName)
回复
中国风 2007-12-30
楼上要改为组合
建唯一约束或唯一索引就行了
回复
Asinzy 2007-12-30
一下代码测试通过:


create table test
(
HotelId int primary key not null,
CityId int unique,
HotelName varchar(50) unique
)


回复
wzy_love_sly 2007-12-30
消息 50000,级别 16,状态 1,过程 tr,第 8 行
不能插入,已有此酒店

(1 行受影响)
回复
wzy_love_sly 2007-12-30
create table tt(id int identity(1,1),城市名 varchar(20), 酒店名 varchar(20))
insert into tt(城市名,酒店名) select '秦皇岛','天开'
insert into tt(城市名,酒店名) select '秦皇岛','秦皇岛大酒店'

create trigger tr
on tt
INSTEAD OF insert
as
begin
if exists(select 1 from tt a,inserted b where a.城市名=b.城市名 and a.酒店名=b.酒店名)
begin
raiserror('不能插入,已有此酒店',16,1)
end
else
insert into tt(城市名,酒店名) select 城市名,酒店名 from inserted
end
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告