添加约束"检查([TYPE] IN(...)Gan我从其他表中获取约束值?

时间:2014-06-02 12:13:03

标签: sql sql-server constraints

我在MSSQL数据库中构建一些约束时遇到问题。该数据库将用于小型电子商店。目前我有这个来创建我的数据库:

CREATE TABLE [dbo].[PRODUCT] (
[ID] INT NOT NULL PRIMARY KEY IDENTITY(1,1),
[ID_SUBCAT] INT NOT NULL,
[KORTING] FLOAT NULL,
[PRIJS] FLOAT NULL,
[TYPE] VARCHAR(5) NOT NULL )

现在我想添加一个约束,即[TYPE]列只能包含某些值。所以我提出了这个约束

GO ALTER TABLE [dbo].[PRODUCT] ADD CONSTRAINT [ProperTypeEntered] CHECK ([TYPE] IN ('Camera', 'Lens'))

但是当我有一个我要添加的新类型时,我总是要编辑这个约束,因为这些值是在约束中硬编码的。所以我希望我可以像这样制作第二张包含所有类型的表格:

CREATE TABLE [dbo].[TYPES] (
[ID] INT NOT NULL PRIMARY KEY IDENTITY(1,1),
[NAAM] VARCHAR(5) NOT NULL )

只有一个约束,只允许插入TYPES.NAAM列。

无论如何这是可能的还是我只是忽略了什么?我对SQL的了解有限,所以任何帮助都会很棒! :)

2 个答案:

答案 0 :(得分:0)

您无法创建执行查询的约束。但是你可以根据插入/更新的触发器来执行它,这将查询你的第二个表,如果找不到“类型”你可能会抛出一个导致插入/更新失败的预期。

答案 1 :(得分:0)

最好的解决方案是创建另一个表,就像你建议的那样,只称它为ProductTypes。将名为TypeID的新INT列添加到dbo.Products。从dbo.Products.TypeID创建外键到dbo.ProductTypes.ID。确保将所有类型添加到dbo.ProductTypes表中。另外,添加一个列" IsActive" BIT,以便您以后不必删除产品类型。如果您有类型表中没有的任何产品,则在拥有外键后,插入NULL。