我想执行以下形式的查询:
INSERT INTO table(field1, field2) SELECT field1, field2 FROM table WHERE id IN ( 4, 8, 15, 16, 23, 42 )
其中 id 是 table
的 auto_increment'ing 主键。
执行这条语句后,我想知道刚刚生成的所有新 id 是什么。我怎样才能恢复这些信息?我有兴趣(也许)在存储过程中执行此操作并将新生成的 id 的列表返回到我的应用程序代码(比方说 PHP),我希望该列表与 IN 子句中出现的顺序相关SELECT 子查询。我认为这会在我的应用程序代码中节省大量顺序插入。这是可以实现的吗?
最佳答案
如果您可以控制该表(或可以创建另一个表)如何存储“transaction_id?”
如果你把它添加到你的表中,你可以这样做:
Declare @tranId int
Select @tranId = Max(transaction_id) + 1 from [table]
Insert Into [table] (field1, field2, transactionId)
Select field1, field2, @tranId
From //the rest of your query
然后您将提取新的 ID:
Select Id from [table] where transaction_id = @tranId
请注意,您要么需要立即运行该查询作为存储过程的一部分,要么需要将您使用的 transactionId 存储在某处,以便您可以提取正确的行而不必担心多个并发插入。
关于php - 从多个插入查询中恢复生成的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3367152/