我根本不太了解SQL,但我有一个表,它有一个唯一的键约束,我可以在SSMS中通过扩展我的表下的Keys文件夹看到它。它创建了一个列,'name',UNIQUE。
目前它是完全独特的,但我需要更改它,因此名称对于另一列中的特定ID是'catflapID'是唯一的。因此,名称可以在表格中重复,但对于每个catflapID,都不能重复。
我完全不知道如何做到这一点,我需要以某种方式最终得到一个删除现有约束的脚本并添加我的新约束。
有什么建议吗?
答案 0 :(得分:1)
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[test_table]') AND name = N'IX_test_table')
ALTER TABLE [dbo].[test_table] DROP CONSTRAINT [IX_test_table]
GO
ALTER TABLE [dbo].[test_table] ADD CONSTRAINT [IX_test_table] UNIQUE NONCLUSTERED
(
[c_name] ASC,
[c_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
答案 1 :(得分:0)
您应该使用两列创建复杂的唯一约束。
删除现有约束并执行此代码(将“MyTable”名称更改为实际表名称)
ALTER TABLE MyTable ADD CONSTRAINT MyConstraint2 UNIQUE (catflapID, name)
答案 2 :(得分:0)
您需要在relation-table中创建外键。例如,
CREATE TABLE table1 (catflapID INT NOT NULL PRIMARY KEY , ...)
CREATE TABLE table2 (ID INT PRIMARY KEY , catflapID INT NOT NULL FOREIGN KEY REFERENCES Table1(catflapID))
table1中的catflapID是NOT NULL和PRIMARY KEY,因此该字段将是唯一的。 表2中引用了表2中的catflapID,因此它只能包含Table1中的值。
答案 3 :(得分:0)
创建新约束
ALTER TABLE tab
ADD CONSTRAINT UniqueNameForCat UNIQUE (catflapID, name);
删除陈旧的过时约束
ALTER TABLE tab DROP CONSTRAINT oldConstraintName;