代码之家  ›  专栏  ›  技术社区  ›  Shankarooni

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

  •  3
  • Shankarooni  · 技术社区  · 16 年前

    假设我定义了一个char列类型。我想严格规定它的值,比如说(黑、白、红、蓝)就可以…

    我该怎么做??

    据我所知,这很容易获得:p

    4 回复  |  直到 16 年前
        1
  •  7
  •   LukeH    16 年前

    如果只有几个允许值,则可以使用 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)
    
        2
  •  2
  •   Jesper Fyhr Knudsen    16 年前

    您应该使用一个规则(正如前面指出的那样,规则现在已被弃用,而应该使用约束)或包含您允许的颜色的颜色表的外键。

    可以这样创建检查约束:

    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')
    

    希望它有帮助

        3
  •  1
  •   Andy White    16 年前

    这样做的一种方法是创建一个单独的表“type”,并将值放在那里。以前有varchar类型的表现在有一个fk typeid指向另一个表。

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

        4
  •  0
  •   Learning    16 年前

    你需要一个 rule on the column

    是的,它很容易进入。