Проверьте количество цифр или их диапазон - PullRequest
1 голос
/ 08 марта 2020

Я попытался создать таблицу для сохранения выставок, и мне нужно сохранить год и месяц в разных столбцах.

У меня проблема с разработчиками моего бэкэнда и внешнего интерфейса для проверки данных. Мне нужно проверить лет 4 числа и месяц между 1-12. Скорость важна для меня .

CREATE TABLE [dbo].[TradeShows](
    [TradeShowsID] [bigint] IDENTITY(1,1) NOT NULL,
    [TradeShowsName] [nvarchar](100) NULL,
    [YearAttended] [smallint] NULL,
    [MonthAttended] [tinyint] NULL,
 CONSTRAINT [PK_TradeShows] PRIMARY KEY CLUSTERED 
(
    [TradeShowsID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

Ответы [ 2 ]

1 голос
/ 26 марта 2020
alter table TradeShows add constraint chk_tradeshows_month
    check (MonthAttended  between 1 and 12);
1 голос
/ 08 марта 2020

Просто используйте check ограничения:

alter table TradeShows add constraint chk_tradeshows_year
    check (YearAttended >= 2000 and YearAttended < 2100);

alter table TradeShows add constraint chk_tradeshows_month
    check (MonthAttended >= 1 and MonthAttended <= 12);

Или вы можете придумать и проверить, что оба вместе образуют действительную дату:

alter table TradeShows add constraint chk_tradeshows_year_month
    check (try_convert(date, concat('-', YearAttended, MonthAttended, '-01')) is not null);
...