4

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

我怎样才能做到这一点??

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

4

4 回答 4

9

如果只有几个允许的值,那么您可以使用CHECK约束

ALTER TABLE dbo.Your_Table
ADD CONSTRAINT CK_YourTable_YourColumn
    CHECK (Your_Column IN ('Black', 'White', 'Red', 'Blue'))

如果有更多值,那么您可以使用查找表和FOREIGN KEY约束

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)
于 2009-03-25T14:32:53.083 回答
2

您应该使用规则(正如所指出的,现在不推荐使用规则,而应使用约束)或包含您允许的颜色的颜色表的外键。

可以像这样创建检查约束:

ALTER TABLE MyTable
ADD CONSTRAINT CK_MyTable_ColorType
    CHECK (ColorType IN ('Black', 'White', 'Red', 'Blue'))

如果您想使用表格,那么您应该创建一个带有颜色名称和 ID 的“颜色”表格。在需要引用的表上,您应该将具有外键的列添加到“颜色”表 ID。

要引用“颜色”表,您必须使用连接,例如

SELECT *
FROM   MyTable INNER JOIN
         ColorTable ON MyTable.ColorID = ColorTable.ID

更新:使用约束而不是规则,旧数据库仍然可以使用规则(2000 年)。

CREATE RULE Color_Rule
AS 
@list IN ('Black', 'White', 'Red', 'Blue')

希望能帮助到你

于 2009-03-25T14:37:10.670 回答
1

一种方法是创建一个单独的表“类型”并将您的值放在那里。曾经具有类型 varchar 的表现在将具有指向另一个表的 FK TypeID。

这将需要一个额外的连接,但可以让您控制哪些字符串可以是类型。

于 2009-03-25T14:33:43.503 回答
0

您需要列上的规则

是的,它就像访问一样容易。

于 2009-03-25T14:33:15.437 回答