我需要有特定唯一术语的桌面设计方面的帮助。 该表将如下所示。
id --> Primary key auto generate
type1 --> varchar(20)
type2 --> varchar(20)
code --> int
代码列是唯一的,但仅当列type2具有相同的值时才允许相同的值。
1 xyz freedom 6773
2 asd freedom 6773
3 rty prison 6773 --> not allowed
4 pop prison 7809
答案 0 :(得分:2)
作为variat,你可以使用附加表和(code,type2)的所有可能组合。
CREATE TABLE checkTable(
code int NOT NULL,
type2 varchar(20) NOT NULL,
CONSTRAINT PK_checkTable_code PRIMARY KEY(code),
CONSTRAINT UK_checkTable_type2 UNIQUE(type2),
CONSTRAINT UK_checkTable_code_type2 UNIQUE(code,type2) -- it's using for FK in your table
)
CREATE TABLE yourTable(
id int IDENTITY NOT NULL,
type1 varchar(20),
type2 varchar(20),
code int,
CONSTRAINT PK_yourTable PRIMARY KEY(id),
CONSTRAINT FK_yourTable_code_type2 FOREIGN KEY(code,type2) REFERENCES checkTable(code,type2)
)
我希望我理解你想要的东西。
答案 1 :(得分:1)
我认为触发器在您的情况下可能有用...下面是伪代码
create trigger trg_test
on table1
after insert
as
begin
if exists(
Select * from inserted i
join
tab1e1 t1
on t1.code=i.code and i.type2<>t1.type2
)
Rollback;
end
有些测试::
以下代码失败
insert into table1
values
('prison',6773)
以下代码成功
insert into table1
values
('prison',6774)
答案 2 :(得分:0)
只要您想插入相同的值,就无法将代码定义为UNIQUE列。
对于您的情况,我建议删除id(自动增加主键)并将type02 +代码作为Composite主键。
答案 3 :(得分:0)
如果您想要允许相同的值,即使存在条件(甚至无法将条件置于索引中),也无法使列唯一
您需要在应用程序中处理验证。