1

次のように定義されたテーブルがあります。

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)

エラーが発生しました

列名または指定された値の数がテーブル定義と一致しません。

チェックが間違っているからでしょうか?

4

3 に答える 3

3

full_nameいいえ、挿入ステートメントを見逃したためです:

insert into HLV values ('HLV0001',GETDATE(), 'michael jordan' ,10,5,6)
于 2015-04-30T05:10:35.933 に答える
1

Giorgi Nakeuri's Answer を拡張するだけで、

insert into HLV列名なしで使用すると、SQL Server は、テーブルで定義されたすべての列を渡すと想定します ( のような列を除くidentity)。あなたのInsertクエリで

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

SQL Server はすべての列の値を予期していますが、 のid, birthday,full_name,win,lose,draw 値のみを渡しているid, birthday,win,lose,drawため、指定された値の数がテーブル定義と一致しません。

列に値をfull_name許可するか、制約がある場合は、次のようなことができますNULLDEFAULT

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

さらに、 のチェック制約に基づいて、IDタイプを からnvarchar(7)に変更する必要がありますCHAR(7)

于 2015-04-30T05:49:56.590 に答える
1

テーブルには 6 つの列がありますが、insert ステートメントの値句には 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())

MSDNにはたくさんの例があります。

于 2015-04-30T05:56:06.097 に答える