如何对SQL表列进行验证?
问题假设: 我在SQL Server中有一个表,其结构如下:如何对SQL表列进行验证?,sql,sql-server,database,Sql,Sql Server,Database,问题假设: 我在SQL Server中有一个表,其结构如下: Column 1: Id | INT | NOT NULL | Auto-Identity Column 2: Name | VARCHAR(20) | NOT NULL Column 3: Number | SMALLINT | NOT NULL 解决方案场景: 我想要的是,无论何时在列中输入某个值,都应该在数据库级别本身根据某些检查对其进行验证或验证 例如: 第3列,编号”应仅允许: 数值 长度为10 和值应以数字4开头 有
Column 1: Id | INT | NOT NULL | Auto-Identity
Column 2: Name | VARCHAR(20) | NOT NULL
Column 3: Number | SMALLINT | NOT NULL
解决方案场景:
我想要的是,无论何时在列中输入某个值,都应该在数据库级别本身根据某些检查对其进行验证或验证
例如:
第3列,编号
”应仅允许:
- 数值
- 长度为10
- 和值应以数字4开头
我认为你的
数字
栏应该是固定宽度的文本
CREATE TABLE MyTable
(
Id INTEGER NOT NULL IDENTITY,
Name VARCHAR(20) NOT NULL UNIQUE, -- presumably a candidate key
Number CHAR(10) NOT NULL
CHECK (Number LIKE '4[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
)
我认为你的
数字
栏应该是固定宽度的文本
CREATE TABLE MyTable
(
Id INTEGER NOT NULL IDENTITY,
Name VARCHAR(20) NOT NULL UNIQUE, -- presumably a candidate key
Number CHAR(10) NOT NULL
CHECK (Number LIKE '4[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
)
当smallint为-32768到+32767时,它的长度怎么可能是10?如果你是指int,那么长度10的值将打破它。长度10和以4开头的值是否包含符号?最大长度将是1到10,或者正好是10?如果第3列应该有10个数字,并且以4开头-它实际上是一个数字吗?我的意思是,这是你想要的吗对(
SUM()
、*
、-
等)执行数学运算。如果不是,并且它的含义完全在字符中,请将其存储为字符,而不是数字类型。@gbn:这只是一个例子……问题的需要是知道如何在表列上进行验证。@marc_s:谢谢,我会这样做,并记住以后的问题。当smallint为-32768到+32767?a时,它的长度怎么可能是10如果你的意思是int,那么长度10的值将打破它。长度10和以4开头的值是否包含符号?最大长度将是1到10或正好是10?如果第3列应该有10个数字,并且以4开头-它实际上是一个数字吗?我的意思是,它是你要对(SUM())执行数学运算的东西吗
、*
、-
等)。如果不是,并且它的含义完全在字符中,请将其存储为字符,而不是数字类型。@gbn:这只是一个例子……问题的需要是知道如何对表列进行验证。@marc_s:谢谢,我会这样做,并记住以后的问题。+1 col3的数据类型应该是bigint,然后您可以告诉我们eCol3在4000000000和499999999之间作为检查约束。@Mikael Derp,我的大脑工作不正常。谢谢你,这对特定场景很好。问题的需要是知道如何对表列进行验证。Col3的+1数据类型应该是bigint,然后你可以在两者之间使用Col3n 4000000000和499999999
作为检查约束。@米凯尔·德普,我的大脑工作不正常。谢谢你,这对特定场景很好。问题的需要是知道如何对表列进行验证。对不起,数字应该是数字(10)更精确吗?@SQL:我想应该是CHAR(10)
。我怀疑问题中的编号类似于账号或员工编号,即不用于数学运算,因此更适合文本数据。对不起,数字应该是数字(10)才能更精确吗?@SQL:我认为应该是字符(10)
。我怀疑所讨论的编号类似于账号或员工编号,即不用于数学运算,因此更适合文本数据。