批量插入返回标识和对象引用/序列

时间:2011-10-15 14:52:47

标签: sql sql-server sql-server-2008 batch-file insert-update

使用C#中的SQL Server 2K8,我正在尝试对父/子表进行批量插入/更新记录以进行优化。

插入/更新将自动生成一个密钥,我想通过OUTPUT等提取,然后重新分配回域模型。对于批量插入,我需要跟踪哪个新生成的ID属于批处理列表中的哪个域对象。

这个例子接近我的需要,但是想知道是否有一种方法可以不在表中添加额外的列(SequenceNumber)并且仍然可以获得相同的结果:http://illdata.com/blog/2010/01/13/sql-server-batch-inserts-of-parentchild-data-with-ibatis/

即。我们可以依赖从OUTPUT生成的插入顺序到临时表中,还是传递一个在数据模型上设置的ref GUID并暂时传递给SQL以供参考?

2 个答案:

答案 0 :(得分:1)

在SQL Server 2008中,可以使用mergeoutput来获取生成的密钥与登台表中使用的密钥之间的映射。

看看这个问题。 Using merge..output to get mapping between source.id and target.id

答案 1 :(得分:0)

除非我误解了......

代理键(IDENTITY或NEWID等)不是您的实际对象标识符。这是一个实现细节,没有内在意义。

您必须拥有另一个真实(自然)密钥的标识符(名称,ISBN,序列号,交易代码/日期等)。

您的OUTPUT子句可以返回代理键和自然键。然后使用它来映射