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 获取受影响记录的标识值的主要内容,如果未能解决你的问题,请参考以下文章