次の列を持つ「Clients」というテーブルを持つ SQL Server Express Compact Edition データベースがあるとします。
ID, FirstName, MiddleName, Nickname, LastName, Suffix, IsMale
ここで、テーブルでこのコマンドを使用しようとすると、ID は自動インクリメントの主キー/ID 値です。
INSERT INTO Clients (Title, FirstName, MiddleName, Nickname, LastName, Suffix,
IsMale) VALUES ('', 'John', '', '', 'Smith', '', 'True')
すべてが機能します。しかし、このコマンドを使用しようとすると:
INSERT INTO Clients VALUES ('', 'John', '', '', 'Smith', '', 'True')
このエラーが表示されます:
The number of columns in the query and the table must match. [ Number of columns
in query = 7, Number of columns in table = 8 ]
私はかなり長い間 SQL Server で挿入ステートメントを使用してきましたが、これが問題になったことは一度もありません。列数に対する検証では、自動インクリメントの主キー/ID タイプは常に無視されていました。この場合の唯一の大きな違いは、私が現在使用している SQL Server は非常にローエンドのバージョンであるのに対して、よりプロフェッショナルなバージョンを使用することに慣れていることです。問題になる可能性がある場合に備えて、これを C# プログラムで使用しています。
これは何が原因でしょうか?ありがとう。
編集: この質問の焦点の多くは、SQL Server の非フリーで非コンパクトなバージョンを使用しているときに、この問題に遭遇したことがないという事実です。私が以前に使用した SQL Server は常に、列数の ID/主キー列を無視し、特定の列名を綴らなくても自動インクリメントされた値を把握するのに十分なほどスマートでした。
ここでのもう 1 つの違いは、以前は常に SQL Management Studio を使用してテーブル定義をいじっていたことですが、この場合は VS 2012 と SQL Server Compact Edition を使用しています。関連するユーザー インターフェイスは明らかにかなり異なるため、この問題が発生しないようにするために、Management Studio でテーブルに指定されているか、何かが指定されているのではないでしょうか?