Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 检查SQL Server中格式为的字符串的约束_Sql Server_Format_Check Constraint - Fatal编程技术网

Sql server 检查SQL Server中格式为的字符串的约束

Sql server 检查SQL Server中格式为的字符串的约束,sql-server,format,check-constraint,Sql Server,Format,Check Constraint,我有一个表,定义如下: create table HLV ( id nvarchar(7) check (id LIKE 'HLV[0-9][0-9][0-9][0-9]') Primary key, birthday date, full_name nvarchar(20) NOT NULL, win int check (win > 0), lose int check (lose > 0), draw int check (draw > 0) ) 我执行代码,它就工作

我有一个表,定义如下:

create table HLV (
id nvarchar(7) check (id LIKE 'HLV[0-9][0-9][0-9][0-9]') Primary key,
birthday date,
full_name nvarchar(20) NOT NULL,
win int check (win > 0),
lose int check (lose > 0),
draw int check (draw > 0)
) 
我执行代码,它就工作了,但是当我用

插入HLV值('HLV0001',GETDATE(),10,5,6)

我弄错了

提供的值的列名或数目与表定义不匹配


是因为支票错了吗?

不是,是因为您在insert语句中遗漏了
全名

insert into HLV values ('HLV0001',GETDATE(), 'michael jordan' ,10,5,6)

不,这是因为您在insert语句中遗漏了
全名

insert into HLV values ('HLV0001',GETDATE(), 'michael jordan' ,10,5,6)

只是为了扩展Giorgi Nakeuri的答案

当您在没有任何列名的情况下使用
insert-into-HLV
时,sql server假定您将通过表中定义的所有列(除了
identity
之类的列)。在
中插入
查询

insert into HLV values (N'HLV0001',GETDATE(), 10,5,6)
SQL Server需要所有列的值
id、生日、全名、win、lose、draw
但是,您只传递id、birth、win、lose、draw的值,因此提供的值的数量与表定义不匹配

如果列
full\u name
允许
NULL
值或具有
默认值
约束,则可以执行以下操作

insert into HLV(id, birthday,win,lose,draw) values (N'HLV0001',GETDATE(), 10,5,6)

此外,根据您对
ID
的检查约束,您应该将其类型从
nvarchar(7)
更改为
CHAR(7)

,以扩展Giorgi Nakeuri的答案

当您在没有任何列名的情况下使用
insert-into-HLV
时,sql server假定您将通过表中定义的所有列(除了
identity
之类的列)。在
中插入
查询

insert into HLV values (N'HLV0001',GETDATE(), 10,5,6)
SQL Server需要所有列的值
id、生日、全名、win、lose、draw
但是,您只传递id、birth、win、lose、draw的值,因此提供的值的数量与表定义不匹配

如果列
full\u name
允许
NULL
值或具有
默认值
约束,则可以执行以下操作

insert into HLV(id, birthday,win,lose,draw) values (N'HLV0001',GETDATE(), 10,5,6)

此外,根据您对
ID
的检查约束,您应该将其类型从
nvarchar(7)
更改为
CHAR(7)
表中有6列,但insert语句values子句中只有5个值。您可以通过指定所有6个必需的值来解决这个问题,但是我还强烈建议在insert语句中指定列名,以使其更易于更改,更易于自我记录。您不必确定实际的列顺序。您可以省略可为null的列和默认列。可以在不中断语句的情况下添加新的可为null或默认列

ALTER TABLE HLV ADD gender char(1) NULL

INSERT HLV (id, birthday, full_name, win, lose, draw)
VALUES ('HLV0001', GETDATE(), 'first last', 10, 5, 6)

INSERT HLV (full_name, id, birthday)
VALUES ('last, first', 'HLV0002', GETDATE())

表中有6列,但insert语句values子句中只有5个值。您可以通过指定所有6个必需的值来解决这个问题,但是我还强烈建议在insert语句中指定列名,以使其更易于更改,更易于自我记录。您不必确定实际的列顺序。您可以省略可为null的列和默认列。可以在不中断语句的情况下添加新的可为null或默认列

ALTER TABLE HLV ADD gender char(1) NULL

INSERT HLV (id, birthday, full_name, win, lose, draw)
VALUES ('HLV0001', GETDATE(), 'first last', 10, 5, 6)

INSERT HLV (full_name, id, birthday)
VALUES ('last, first', 'HLV0002', GETDATE())
上面有大量的例子