【发布时间】:2015-12-15 15:35:40
【问题描述】:
我想使用 SQL Server 创建一个列,该列将接受精确为 6 位的值。不接受具有更多或更少位数的值。
【问题讨论】:
我想使用 SQL Server 创建一个列,该列将接受精确为 6 位的值。不接受具有更多或更少位数的值。
【问题讨论】:
您可以使用简单的CHECK 约束并检查列长度。这已经被告知,但没有发布解决方案,所以我在这里:
CREATE TABLE dbo.Test
(
YourSixDigitColumn INT
, CONSTRAINT CK_CheckLength CHECK (LEN(YourSixDigitColumn) = 6)
);
如果我尝试插入其中之一:
INSERT INTO dbo.Test
VALUES (12345);
INSERT INTO dbo.Test
VALUES (1234567);
它会给我这个讨厌的错误信息:
消息 547,级别 16,状态 0,第 7 行 INSERT 语句冲突 使用 CHECK 约束“CK_CheckLength”。冲突发生在 数据库“master”,表“dbo.Test”,列“YourSixDigitColumn”。这 语句已终止。
而且这条 SQL 语句可以完美运行:
INSERT INTO dbo.Test
VALUES (123456);
【讨论】:
使用char(6) 或Decimal(6,0)。
但要强制它不能少于 6 位,您需要使用 check constraint。
【讨论】:
ADD CONSTRAINT [MinLengthConstraint] CHECK (DATALENGTH([your_column]) = 11),但没有成功
您可以为此使用 SQL Server 的Check Constraints。这些是限制列中允许值的好方法。
如果您的六位数始终是整数,您的规则将如下所示:
ColumnA >= 100000 AND ColumnA <= 999999.
【讨论】: