【发布时间】:2017-03-27 09:33:20
【问题描述】:
我想对我的表 Visitor 设置一个允许插入重复数据的约束。但是,只有在布尔值 (IsUnique) 设置为 true 时才允许这样做。
例如(在 --> 之后每次插入的预期结果):
INSERT INTO Visitor (FirstName, LastName, IsUnique) VALUES ('John', 'Doe', 'True') --> ok
INSERT INTO Visitor (FirstName, LastName, IsUnique) VALUES ('John', 'Doe', 'True') --> not ok. already exists
INSERT INTO Visitor (FirstName, LastName, IsUnique) VALUES ('John', 'Doe', 'False') --> ok. IsUnique is set to false
INSERT INTO Visitor (FirstName, LastName, IsUnique) VALUES ('John', 'Doe', 'False') --> also ok because IsUnique is set to false
这是我目前想出的:
ALTER TABLE Visitor ADD CONSTRAINT CT_UniqueVisitor UNIQUE NONCLUSTERED (Title, Firstname, Lastname, Company, IsUnique)
这根本不允许插入重复的行。请帮忙。
【问题讨论】:
-
这是为 oracle 准备的吗?
-
标记您的数据库
-
你的四个插入是一个例子还是两个例子?我们是否允许
John, Doe, False和John, Doe, True这两个行? -
用于 mssql。很抱歉没有提到这一点。这四个插件是一个示例。如果为 True,则不应有任何其他具有相同值的行。如果允许虚假重复
-
这个问题毫无意义。如果记录是真正的重复,其中
N-1是多余的,并且没有向现有记录添加任何信息,那么为什么要允许它们存在呢?如果它们不重复,则您的主键定义错误(因为并非所有非键列都依赖它)
标签: sql sql-server constraints unique