Access SQL:从插入语句或从 DAO.QueryDef 获取受影响记录的标识值

Posted

技术标签:

【中文标题】Access SQL:从插入语句或从 DAO.QueryDef 获取受影响记录的标识值【英文标题】:Access SQL: Get the identity value of the affected record from an insert statement Or From a DAO.QueryDef 【发布时间】:2018-04-25 07:11:28 【问题描述】:

我必须转换一些 SQL 查询才能访问 SQL。其中一些使用@@identity 将两个链接的记录插入到两个不同的表中。不幸的是,访问查询只能包含一个语句(即我不能在插入语句之后选择@@identity)。

这是不可能的:

insert into table1 (values)
  select values from table1 where id=@id;
select @@identity;

此示例语句应该将 Table1 中的记录复制到所述表中的新记录,然后在 Table2 中执行相同操作,引用 Table1 中的新记录。

下面是 sql 查询的样子:

        INSERT INTO Table1 ( some_value, the_other_values)
        SELECT  @new_value as some_value, the_other_values
        FROM    Table1
        WHERE   id = @oldID

        SELECT @New_id = @@identity

        INSERT INTO     Table2 ( idP, other_values)
            SELECT  @New_id AS idP, other_values
            FROM    Table2
            WHERE   (idP = @Old_id)

我尝试在两个语句中使用 vba 执行此操作,但我发现无法从另一个查询访问 @@identity。

这是 vba - 我省略了声明,实际代码是一个循环,但这是重要的部分:

Set qdf = CurrentDb.QueryDefs("first_part_of_query")
        qdf!New_id = userInput_newID
        qdf!oldID = userInput_oldID
        qdf.Execute
        Set qdf = CurrentDb.QueryDefs("second_part_of_query")
        qdf!New_id = the_identityvalue 'WHAT DO I SET THIS TO?
        qdf.Execute

【问题讨论】:

【参考方案1】:

您需要使用数据库的单个实例,然后您可以只使用OpenRecordset("SELECT @@IDENTITY") 来获取标识值。

Dim db As DAO.Database
Set db = CurrentDb
Set qdf = db.QueryDefs("first_part_of_query")
qdf!New_id = userInput_newID
qdf!oldID = userInput_oldID
qdf.Execute
Set qdf = db.QueryDefs("second_part_of_query")
qdf!New_id = db.OpenRecordset("SELECT @@IDENTITY").Fields(0)
qdf.Execute

【讨论】:

我还不能尝试这个,但它是有道理的。谢谢!

以上是关于Access SQL:从插入语句或从 DAO.QueryDef 获取受影响记录的标识值的主要内容,如果未能解决你的问题,请参考以下文章

MS Access - 从文本框中的用户输入将参数传递给 SQL 语句

SQL 语句末尾的字符--Access 数据库

Access SQL - 插入带有空字段的记录?

在 ms-access 表中插入多行的 SQL 代码

MS Access 中的多行插入语句

跟踪从 MS Access 到 MySQL 的 SQL 调用