1

我需要能够更改表中的主键。问题是,一些键将更改为现有键值。例如,record1.ID 3=>4 和 record2.ID 4=>5。我需要将它们保留为主键,因为它们被设置为外键(级联更新)是否有合理的方法来实现这一点,或者我是否正在尝试 sql heresey?

至于为什么,我有一组表中的数据,这些表由这个主键链接,这些表被插入/更新到另一组类似结构的表中。插入是部分进行的,因为它是重复数据删除过程的一部分,如果我可以简单地使用新的主键更新所有要插入的表,生活会更轻松。

一种解决方案是在目标表上开始索引高于传入表行数将达到的(传入表每次都重新=索引),但我仍然想知道是否可以执行上述操作,除此以外。

TIA

4

2 回答 2

1

您正在尝试 sql 异端。我实际上很开放,并且知道很多时候必须做一些看起来很疯狂的事情。当人们傲慢地回答“你应该以不同的方式做事”时,当他们知道情况如何时,这让我很恼火。但是我必须告诉你,你应该以不同的方式来做这件事。嘿嘿。

不,没有办法用 sql\DataAdapter 优雅地做到这一点。您可以通过 ADO.NET 使用一系列 t-sql 命令来完成。您必须每次打开标识覆盖模式set identity_insert theTable on(但是,您需要增加使用它作为外键的所有其他表。但是等等,情况变得更糟:

  • 您将需要在一个事务中完成所有这些,因为在此期间您不能对这些表进行任何其他操作,并且因为如果出现故障,您肯定需要回滚。这可能是一个很大的处理块;你的桌子会被锁好一会儿。
  • 如果这些表之间有任何外键约束,则需要在执行此操作之前将其关闭,然后再重新实现它们。
于 2010-01-12T21:37:52.113 回答
0

如果你发现自己开始考虑更新主键值,警钟应该开始响起。它可能看起来更容易,但我将其归类为更多的黑客而不是解决方案。就个人而言,我会重新考虑并尝试解决真正的问题——现在可能看起来更难,但维护和减少潜在的可怕问题会好得多。

于 2010-01-12T21:41:24.517 回答