将查询中的自动增量作为要在另一个查询中使用的变量

时间:2012-08-07 12:57:39

标签: sql oracle coldfusion

我插入两张桌子。进入第一个表是一个新的'项目'。有很多领域,但为了简单起见,我只会告诉你我需要什么。这是我的coldfusion页面:

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

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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

SELECT itemid_sequence.nextval FROM DUAL

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

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