【问题标题】:Using Autonumbering in Access - INSERT statements在 Access 中使用自动编号 - INSERT 语句
【发布时间】:2009-04-21 07:43:56
【问题描述】:

我在运行INSERT 语句时遇到问题,其中有一个自动编号作为 PK 字段。我有一个自动递增的long 作为主键,然后是double 类型的4 个字段;然而 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!!

如何使用自动编号来实际自动编号?

【问题讨论】:

    标签: sql ms-access insert ado autonumber


    【解决方案1】:

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

    所以,你要做的是:

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

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

    然后您可以通过执行

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

    声明。

    【讨论】:

    • 非常感谢!您不仅回答了我的问题,还回答了我正在编写的下一个问题:如何在插入后提取自动编号。干杯!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        只需将自动编号保留在插入查询之外。它会自行填充。

        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;
        

        【讨论】:

        • 相当难以理解的答案,也许尝试更具体地了解其他人的要求,而不是使用您拥有的代码。
        猜你喜欢
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 2017-09-02
        • 2012-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多