检查数字位数或范围

问题描述 投票:0回答:1

我试图创建一个表来保存贸易展览,我需要将年和月保存到不同的列中。

我的后端和前端开发人员在检查数据时遇到问题。我需要检查年份是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
sql sql-server database-design
1个回答
1
投票

仅使用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);
© www.soinside.com 2019 - 2024. All rights reserved.