在Access中使用自动编号 - 插入语句

7
我在运行一个包含自动编号作为主键字段的INSERT语句时遇到了问题。我的主键是自动增量的long,然后有4个double类型的字段;但是Access(使用ADO)似乎需要插入语句的五个值。
INSERT INTO [MY_TABLE] VALUES (1.0, 2.0, 3.0, 4.0);
>> Error: Number of query values and destinations fields are not the same.

INSERT INTO [MY_TABLE] VALUE (1, 1.0, 2.0, 3.0, 4.0);
>> Success!!

我该如何使用自动编号功能来实现自动编号?

4个回答

18
如果您不想为表中存在的所有列提供值,那么您必须指定要插入的列。(这是合理的,否则访问或任何其他数据库如何知道您正在为哪些列提供值呢?)
因此,您需要执行以下操作:
INSERT INTO MyTable ( Column2, Column3, Column4) VALUES ( 1, 2, 3 )

同时,请确保省略主键列(即自动编号字段)。 然后,Access将自动设置为下一个值。

您可以通过执行以下操作检索新插入记录的主键值

SELECT @@identity FROM MyTable

语句。


1
非常感谢!你不仅回答了我的问题,还回答了我正在写的下一个问题:如何在插入后提取自动编号。干杯! - Smashery

1
在查询中提到列名,因为您只提供了4个值,而该表有5个列。数据库需要知道您提供的值是哪个列的。

0

在插入查询中,只需省略自动编号即可,它会自行填充。

在 ProjectID 之前有一个 ID 字段。

INSERT INTO ProjectRiskAssessment 
( ProjectID
, RiskClass
, RiskElement
, RiskAttribute
, RiskQuestion
, RiskScale
, RiskStatus
, RiskSeverity
, RiskProbability
, RiskResponse )
SELECT 
 1 AS Expr2
, PullRiskAssessmentQuestions.RiskClass
, PullRiskAssessmentQuestions.RiskElement
, PullRiskAssessmentQuestions.RiskAttribute
, PullRiskAssessmentQuestions.RiskQuestion
, '0' AS Expr3
, 'Open' AS Expr4
, '1' AS Expr5
, '1' AS Expr6
, ' ' AS Expr7
FROM PullRiskAssessmentQuestions;

相当难以理解的答案,也许尝试更具体地回答对方的问题,不要使用你已经有的代码。 - Migol

0

我理解的是,如果您使用的是SQL Server或类似的数据库,并且有触发器添加了其他记录,则@@IDENTITY可能是其他附加记录的标识符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接