假设我定义了一个char列Type。我想严格说它的价值,例如(黑色,白色,红色,蓝色)只... ...
我该怎么做?
我知道,这在Access中很容易:P
答案 0 :(得分:7)
如果只有几个允许的值,那么您可以使用CHECK
constraint:
ALTER TABLE dbo.Your_Table
ADD CONSTRAINT CK_YourTable_YourColumn
CHECK (Your_Column IN ('Black', 'White', 'Red', 'Blue'))
如果有更多值,则可以使用查找表和FOREIGN KEY
constraint:
CREATE TABLE dbo.Lookup_Colours (Colour VARCHAR(10))
-- then populate Lookup_Colours with all permitted values
ALTER TABLE dbo.Your_Table
ADD CONSTRAINT FK_YourTable_YourColumn
FOREIGN KEY (Your_Column)
REFERENCES dbo.Lookup_Colours (Colour)
答案 1 :(得分:2)
您应该使用规则(如指出的那样,现在不推荐使用规则而不是使用约束)或使用包含您允许的颜色的Color表的外键。
可以像这样创建一个Check约束:
ALTER TABLE MyTable
ADD CONSTRAINT CK_MyTable_ColorType
CHECK (ColorType IN ('Black', 'White', 'Red', 'Blue'))
如果你想使用表格,那么你应该创建一个带有colorName和ID的'Color'表。在需要引用的表上,您应该将带有外键的列添加到'Color'-table ID。
要引用“颜色”表,您必须使用连接,例如
SELECT *
FROM MyTable INNER JOIN
ColorTable ON MyTable.ColorID = ColorTable.ID
更新:使用Constraint而不是Rule较旧的数据库仍然可以使用Rules(2000)。
CREATE RULE Color_Rule
AS
@list IN ('Black', 'White', 'Red', 'Blue')
希望有所帮助
答案 2 :(得分:1)
这样做的一种方法是创建一个单独的表“Type”并将值放在那里。用于拥有Type varchar的表现在将具有指向另一个表的FK TypeID。
这将需要额外的连接,但可以控制哪些字符串可以是类型。
答案 3 :(得分:0)
是的,它就像访问一样简单。