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

时间:2009-04-21 07:43:56

标签: sql ms-access insert ado autonumber

我在运行INSERT语句时遇到问题,其中有一个自动编号作为PK字段。我有一个自动递增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 个答案:

答案 0 :(得分:15)

如果您不想为表中存在的所有列提供值,则必须指定要插入的列。 (这是合乎逻辑的,否则应该如何访问或任何其他数据库知道您提供的值是哪些列?)

所以,你需要做的是:

INSERT INTO MyTable ( Column2, Column3, Column4) VALUES ( 1, 2, 3 )

另外,请确保省略Primary Key列(自动编号字段)。 然后,Access将自己将其设置为下一个值。

然后,您可以通过执行

来检索新插入记录的主键值
SELECT @@identity FROM MyTable

语句。

答案 1 :(得分:1)

提及查询中的列名称,因为您只提供4个值,而该表中有5列。数据库需要知道您提供的值是针对哪一列。

答案 2 :(得分:0)

我的理解是,如果你使用SQL Server或类似的,并且有触发器添加额外的记录,@@ IDENTITY可能是其他附加记录的。

答案 3 :(得分: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;