gpt4 book ai didi

sql - 为什么我必须在此插入语句中包含主键列?

转载 作者:行者123 更新时间:2023-12-04 02:13:54 25 4
gpt4 key购买 nike

给定一个 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 中执行此操作时,可以避免出现此问题?

最佳答案

如果您没有在插入语句中指定列,那么它会考虑所有列。即使其中一列是自动递增的。

Insert - MSDN

column_list must be used when explicit values are inserted into an identity column, and the SET IDENTITY_INSERT option must be ON for the table.

关于sql - 为什么我必须在此插入语句中包含主键列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14272320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com