Как настроить ограничение для ограничения поля Char набором значений? - PullRequest
1 голос
/ 13 мая 2011

У меня сегодня пук мозга. В SQL Server (в настоящее время используется 2008), как настроить поле char для приема только определенной серии символов (примерно восемь букв с учетом регистра)? И мне нужно повторно использовать это «настраиваемое поле» в нескольких таблицах.

Я знаю, что могу настроить другую таблицу и наложить на нее ограничение внешнего ключа. Это единственный способ?

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

Если вы используете двойную отрицательную конструкцию, это позволяет использовать только символы от A до H

ALTER TABLE MyTable WITH CHECK
   CONSTRAINT CK_MyTable_MyColChars CHECK (
     MyColChars COLLATE Latin1_General_BIN NOT LIKE '%[^ABCDEFGH]%'
     )

. Для повторного использования используйте udf

CREATE FUNCTION dbo.CheckChars (@Value varchar(100))
RETURNS bit
AS
BEGIN
   RETURN (CASE WHEN @Value NOT LIKE '%[^ABCDEFGH]%' THEN 1 ELSE 0 END)
END
GO

... CHECK (
      dbo.CheckChars (MyColChars) = 1
     )

. Если вы хотите A_F,-колон и пробел это будет '%[^ABCDEF; ]%' например

1 голос
/ 13 мая 2011

Возможно, вы захотите изучить создание проверочного ограничения. У этого поста есть соответствующий шаблон, из которого вы можете построить:

Как сделать, чтобы SQL Server 2008 проверял ограничение таблицы Разрешить только определенные символы?

Чтобы получить регистрозависимое сопоставление, удалите «a-z» в шаблоне и создайте проверочное ограничение с учетом регистра с учетом регистра. Это обеспечивает сопоставление с учетом регистра, даже если сервер и база данных нечувствительны к регистру.

...