我在运行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!!
如何使用自动编号实际自动编号?
答案 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;