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

发布于 2024-12-10 09:13:19 字数 505 浏览 0 评论 0原文

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

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

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

即。我们是否可以依赖从 OUTPUT 生成的插入到临时表中的顺序,或者传递在数据模型上设置的引用 GUID 并临时传递到 SQL 以供参考?

With SQL Server 2K8 from C# I'm trying to do a batch insert/updates of records to a parent/child tables to optimize.

The inserts/updates will generate a key automatically which I'd like to extract via an OUTPUT, etc. and then reassign back in the domain model. For batch inserts I need to keep track of which newly generated ID belongs to which domain object in the batch list.

This example comes close to what I need, but was wondering if there's a way to not have an extra column added to the table (SequenceNumber) and still achieve the same results: http://illdata.com/blog/2010/01/13/sql-server-batch-inserts-of-parentchild-data-with-ibatis/

ie. could we rely on the order of the inserts generated from the OUTPUT into the temp table, or pass a ref GUID set on the data model and passed temporarily to the SQL just for reference purposes?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

带刺的爱情 2024-12-17 09:13:19

在 SQL Server 2008 中,可以使用 合并输出以获取生成的密钥和临时表中使用的密钥。

看看这个问题。 使用 merge..output 获取映射在source.id和target.id之间

In SQL Server 2008 it is possible to use merge and output to get a mapping between the generated key and the key used in the staging table.

Have a look at this question. Using merge..output to get mapping between source.id and target.id

比忠 2024-12-17 09:13:19

除非我误解了...

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

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

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

Unless I've misunderstood...

A surrogate key (IDENTITY or NEWID etc) isn't your actual object identifier. It's an implementation detail and has no intrinsic meaning.

You must have another identifier (name, ISBN, serial number, transaction code/date, etc) that is the real (natural) key.

Your OUTPUT clause can return the surrogate key and the natural key. You then use this to map back

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文