SQLServer: как привязать фиксированные значения к столбцу? - PullRequest
3 голосов
/ 25 марта 2009

Скажем, я определил тип столбца типа char. Я хочу строго указать его значение, например, (черный, белый, красный, синий) ...

Как я могу это сделать ??

Все, что я знаю, это легко в доступе: P

Ответы [ 4 ]

7 голосов
/ 25 марта 2009

Если допустимых значений несколько, вы можете использовать ограничение 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)
2 голосов
/ 25 марта 2009

Вы должны либо использовать правило (как было указано, правила теперь устарели, а не использовать ограничения), либо внешний ключ таблицы цветов, содержащей разрешенные цвета.

Проверочное ограничение может быть создано следующим образом:

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

Если вы хотите использовать таблицу, вы должны создать таблицу Color с именем colorName и идентификатором. В таблице (таблицах), для которой требуется ссылка, необходимо добавить столбец с внешним ключом к идентификатору таблицы «Color».

Для ссылки на таблицу «Цвет» необходимо использовать объединение, например:

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

Обновлено: с ограничением вместо правила старые базы данных все еще могут использовать правила (2000).

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

Надеюсь, это поможет

1 голос
/ 25 марта 2009

Один из способов сделать это - создать отдельную таблицу «Тип» и поместить туда свои значения. Таблица, в которой используется тип varchar, теперь будет иметь идентификатор FK TypeID, указывающий на другую таблицу.

Это потребует дополнительного объединения, но даст вам контроль над тем, какие строки могут быть типами.

0 голосов
/ 25 марта 2009

Вам нужно правило для столбца

И да, это так же просто, как и в доступе.

...