检查 SQL 服务器格式的字符串约束

Check constraint for string with a format in SQL Server

我有一个 table 定义如下:

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)
) 

我执行代码并且它有效,但是当我使用

将数据插入其中时

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

我收到错误

Column name or number of supplied values does not match table definition.

是不是支票错了?

不,这是因为您在插入语句中遗漏了 full_name

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

只是为了扩展 Giorgi Nakeuri 的回答,

当您使用不带任何列名的 insert into HLV 时,sql 服务器假定您将传递 table 中定义的所有列(除了像 identity).在您的 Insert 查询中

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

SQL 服务器需要所有列的值 id, birthday,full_name,win,lose,draw 但是,您只传递 id, birthday,win,lose,draw 的值,因此提供的值数量与 table 定义不匹配。

如果您的列 full_name 允许 NULL 值或具有 DEFAULT 约束,您可以这样做

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

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

table中有6列,但insert语句values子句中只有5个值。您可以通过指定所有 6 个必需值来解决问题,但是我也强烈建议在插入语句中指定列名,以使其更易于更改,更易于自我记录。您不必确定实际的列顺序。您可以省略可为空和默认的列。可以在不破坏语句的情况下添加新的可为 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())

MSDN 上有大量示例。