6

我在运行将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

4 回答 4

16

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

所以,你需要做的是:

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

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

然后,您可以通过执行以下命令来检索新插入记录的主键值

SELECT @@identity FROM MyTable

陈述。

于 2009-04-21T07:47:55.093 回答
1

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

于 2009-04-21T07:48:56.227 回答
0

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

于 2009-04-23T05:07:22.747 回答
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;
于 2014-02-14T14:13:19.420 回答