给定一个 SQL Server Express Compact Edition 数据库,其中包含一个名为“Clients”的表,其中包含以下列:
ID, FirstName, MiddleName, Nickname, LastName, Suffix, IsMale
其中 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 中使用插入语句已经有一段时间了,这从来都不是问题;针对列数的验证始终忽略自动递增的主键/身份类型。在这种情况下,唯一的主要区别是我现在使用的是非常低端的 SQL Server 版本,而我习惯使用更专业的版本。万一这可能很重要,我在 C# 程序中使用它。
什么会导致这种情况?谢谢。
编辑:这个问题的很多焦点是我在使用非免费、非紧凑版本的 SQL Server 时从未遇到过这个问题。我以前使用的 SQL Server 总是足够聪明,可以忽略列计数中的标识/主键列,并且只需找出自动递增的值,而无需我拼出特定的列名。
虽然这里的另一个区别是我之前一直使用 SQL Management Studio 来处理表定义,而在这种情况下我正在使用 VS 2012 和 SQL Server Compact Edition。所涉及的用户界面显然有很大不同,所以我想可能是为表指定了某些内容,或者当您在 Management Studio 中执行此操作时可以防止此问题发生?