如何对SQL表列进行验证?

如何对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开头 有

问题假设:

我在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开头
有谁能建议在数据库级别实现此功能的最佳方法吗?

使用检查约束-

使用检查约束-


我认为你的
数字
栏应该是固定宽度的文本

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,然后您可以告诉我们e
Col3在4000000000和499999999之间作为检查约束。@Mikael Derp,我的大脑工作不正常。谢谢你,这对特定场景很好。问题的需要是知道如何对表列进行验证。Col3的+1数据类型应该是bigint,然后你可以在两者之间使用
Col3n 4000000000和499999999
作为检查约束。@米凯尔·德普,我的大脑工作不正常。谢谢你,这对特定场景很好。问题的需要是知道如何对表列进行验证。对不起,数字应该是数字(10)更精确吗?@SQL:我想应该是
CHAR(10)
。我怀疑问题中的
编号类似于账号或员工编号,即不用于数学运算,因此更适合文本数据。对不起,数字应该是数字(10)才能更精确吗?@SQL:我认为应该是
字符(10)
。我怀疑所讨论的
编号类似于账号或员工编号,即不用于数学运算,因此更适合文本数据。