SQLServer:如何将固定值绑定到列?

时间:2009-03-25 14:29:48

标签: sql-server bind

假设我定义了一个char列Type。我想严格说它的价值,例如(黑色,白色,红色,蓝色)只... ...

我该怎么做?

我知道,这在Access中很容易:P

4 个答案:

答案 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)

您需要rule on the column

是的,它就像访问一样简单。