我需要能够更改表中的主键。问题是,某些键将更改为现有键值。例如。 record1.ID 3 => 4和record2.ID 4 => 5。我需要保留这些作为主键,因为它们被设置为外键(级联更新)是否有合理的方法来实现这一点,或者我是否尝试sql heresey?
至于原因,我将来自这个主键链接的一组表中的数据插入/更新到另一组结构相似的表中。插入是部分的,因为它是重复数据删除过程的一部分,如果我可以简单地更新所有要用新主键插入的表,生活会更容易。
一种解决方案是启动目标表上的索引高于行计数将达到的传入表(每次传入表重新索引),但我仍然想知道是否可以执行以上,否则。
TIA
答案 0 :(得分:1)
你正在尝试sql异端。我其实很开明,很多时候都必须做一些看似疯狂的事情。当人们傲慢地回答“你应该以不同的方式做事”,当他们知道情况是什么时,这让我很烦。但是我必须告诉你你应该以不同的方式做这件事。嘿嘿。
不,没有办法用sql \ DataAdapter优雅地做到这一点。您可以通过ADO.NET使用一系列t-sql命令 进行此操作。您必须每次打开身份覆盖模式(set identity_insert theTable on
),执行查询,其中该表上的所有值都增加1,然后转为自动编号覆盖模式。但是,您需要将使用此作为外键的所有其他表增加。但等等,情况变得更糟:
答案 1 :(得分:0)
如果您发现自己开始考虑更新主键值,则应该响铃警报铃声。 这似乎更容易,但我认为它更像是一个黑客而不是一个解决方案。就我个人而言,我正在重新思考并试图解决真正的问题 - 现在看起来可能更难,但维持和减少潜在的可怕问题会好得多。