Как ограничить диапазон значений, который можно поместить в столбец? - PullRequest
0 голосов
/ 09 января 2019

Я новичок в SQL, У меня есть таблица со столбцом GroupRole и столбцом Age.

    CREATE TABLE [Persons](
        [PersonID] [int] IDENTITY(1,1) NOT NULL,
        [FullName]   [varchar](70) NULL,
        [Age] [int] NULL,
        [GroupRole ] [varchar](30) NULL

 CONSTRAINT [PK_Persons] PRIMARY KEY CLUSTERED 
(
    [PersonID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

Я хочу ограничить диапазон значений, который можно поместить в столбец возраста ниже 30 и столбец GroupRole равен «Admin».

Я не хочу делать это в коде c #.

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

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вам необходимо использовать Проверить ограничения . Они являются частью метаданных вашей таблицы и определяют условия, которые необходимо проверять каждый раз, когда данные изменяются или вставляются в таблицу. Если эти условия не выполняются, операция DML завершится с ошибкой.

Вам необходимо изменить оператор CREATE TABLE следующим образом:

CREATE TABLE [Persons](
    [PersonID] [int] IDENTITY(1,1) NOT NULL,
    [FullName]   [varchar](70) NULL,
    [Age] [int] NULL CONSTRAINT CHK_Age CHECK ([Age] < 30),
    [GroupRole] [varchar](30) NULL CONSTRAINT CHK_GroupRole CHECK ([GroupRole] in ('Admin'))

CONSTRAINT [PK_Persons] PRIMARY KEY CLUSTERED 
(
    [PersonID] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
0 голосов
/ 09 января 2019

это простой способ:

ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=30 AND GroupRole ='Admin');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...