2

我正在插入两个表。第一个表中有一个新的“项目”。有很多字段,但为简单起见,我只会向您展示我需要的内容。这是我的coldfusion页面:

<cfquery>
    INSERT INTO my_item_table (itemid, a bunch of other stuff)
    VALUES (itemid_sequence.nextval, a bunch of other stuff)
</cfquery>

我的问题是我想将该自动递增的 itemid 作为值插入到另一个表中,即文件附件表。相同的冷融合页面:

<cfquery>
    INSERT INTO my_attachments_table (attachno, itemid, filename)
    VALUES (attachment_sequence.nextval, **AUTO-INCREMENT VALUE HERE**, '#url.fileName#')
</cfquery>

我知道我可以在 item 表中查询刚刚输入到第一个表中的值,但即使不太可能,用户输入也有可能不是唯一的,这意味着对相同字段的查询可能会返回更多比一排。在这种情况下,我无法获得 itemid。在查询中创建的 itemid 是唯一的唯一标识符。

我的问题是:有没有办法将 auto=increment 设置为查询内部的值,以便我可以在外部使用它?如果没有,你会如何建议我的 itemid?谢谢。

4

2 回答 2

5

如果您在 ColdFusion 8/9/10 中执行插入操作,它会在标签的结果属性中返回插入行(或行)的 ID。例如,如果您使用的是 SQL Server,则 result_name.IDENTITYCOL 是对插入行 ID 的引用。如果您使用的是 MySQL,则为 result_name.GENERATED_KEY。

于 2012-08-07T13:12:17.937 回答
1

您可以首先使用如下查询将下一个序列值检索到变量中:

SELECT itemid_sequence.nextval FROM DUAL

(DUAL 是 Oracle 中的虚拟表)。然后,您可以继续在两个 INSERT 查询中使用此变量。

另一种选择:在数据库中创建一个存储过程,它将为您触发两个查询。

于 2012-08-07T13:03:03.590 回答