我插入两张桌子。进入第一个表是一个新的'项目'。有很多领域,但为了简单起见,我只会告诉你我需要什么。这是我的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设置为查询中的值,以便我可以在外面使用它?如果没有,你会如何建议我的项目?感谢。
答案 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查询中使用此变量。
另一种选择:在数据库中创建一个存储过程,为您启动两个查询。