我有一个程序在一个SQL数据库中插入一堆数据。数据由报告组成,每个报告都有许多标记。在
一个标签有一个字段报告id,它是对相关报告主键的引用。在
现在,每次插入数据时,可能有200个报告甚至更多,每个报告可能有400个标记。所以在伪代码中我要做的是:
for report in reports:
cursor_report = sql('INSERT report...')
cursor_report.commit()
report_id = sql('SELECT @@IDENTITY')
for tag in report:
cursor_tag += sql('INSERT tag, report_id=report_id')
cursor_tag.commit()
我不喜欢这样有几个原因。通常我不喜欢SELECT @@IDENTITY
语句。在
INSERT report...
返回插入的主键,这可能吗?在由于我现在必须在报告之间提交,所以程序在这些时刻“暂停”。如果我能在最后完成所有的事情,那将大大减少花费的时间。我一直在考虑在Report中创建一个单独的字段用于标识,这样我就可以report_id = (SELECT id FROM reports WHERE seperate_field=?)
或在标记中创建一些东西,但这似乎不太优雅。在
不需要。数据库引擎跟踪每个连接的最后一个identity值,并为执行
SELECT @@IDENTITY
语句的连接返回相应的值。在相关问题 更多 >
编程相关推荐