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

dalisong 2007-12-30 01:08:33
我有一个表,现有HotelId,CityId,HotelName等字段
HotelId字段是主键标识列,自动生成编号。
要保证同一城市不能有名字相同的酒店,我只知道主键可以避免插入重复值,但CityId,HotelName是普通字段,以这两个字段为条件,怎么才能保证没有重复值。
...全文
305 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧