2010-09-28 44 views
2

我有一个应用程序在拥有总部和分支机构的企业上运行。每个分支有单独的本地服务器和数据库。主服务器和数据库每天通过批量更新进行更新。我如何克服这种情况下的身份冲突。SQL服务器2008中的批量更新

例如:I有ID的记录的分支甲 另外,参照ID (外键),但在保存到主DB的唯一id这可以被改变,因此该事务是一个交易不匹配....

请帮助我解决这个...

提前感谢所有....

回答

1
The master server and DB is updated daily by batch updation 

不知道的完全细节,你怎么做你的批量更新用或您的数据库有多大和你有多少表所面临这种问题是可能的方式是通过保持映射,一个通用的方法表

在批处理更新用逻辑,

  • 新记录,你会先插入记录到主表,然后用他们的新的ID从主机产生,插入一个重编码到映射表中,详细信息如:分支,分支ID,MasterID,其中存储着2 ID的关系

  • 对于现有记录,您将加入映射表并使用它们的masterID从映射表中更新记录

通常,在SQL Server中,如果批量更新是作业,则可以使用SSIS并在SSIS包中包含这种类型的逻辑。

此外,它取决于你的设计,但通常有一个

源DB - > DB分期 - >目标DB

你的情况映射到

分公司DB - >暂存DB - >主数据库

对于此类ETL类任务。在这种情况下,映射表可能应该驻留在暂存数据库中,但如果您没有这样的设计(,您真的应该),这些映射表可以驻留在Destination中主数据库以及

+0

我总共有300个桌子,其中大约100个桌子可能会面临这个问题。我可以为这么多桌子做这个,或者有其他方法吗?... @ nithu @ – Nithesh 2010-09-28 09:09:10

+0

您可以轻松地为100个桌子做到这一点,但这将是您的ETL包装设计如何运作的重大改变!但是,我没有看到任何简单的方法摆脱困境,因为它看起来像是一个主要的设计缺陷 - 您在所有单独的数据库中分别生成ID。我认为这个建议更多的是解决方法,但如果你有奢侈品,你甚至可以考虑重新设计一个应用程序,只在一个地方创建ID。这实际上是最简单的方法来照顾你所有的问题! – InSane 2010-09-28 10:38:41

+0

谢谢你......保持共享知识..... – Nithesh 2010-09-28 11:18:40

1

对于这种克服你可以使用uniqueidentifier的数据类型为分公司ID

因此,每个数据库都可以使用NEWID()创建ID,而无需担心主数据库更改密钥,因为它是全球唯一的。

如果你不想改变数据类型,你可能有每个分支的数字范围。取决于每个分支中创建的记录数量。

+0

感谢您的回复......但是使用此ID,我如何识别在对应于该ID的分支中完成的上一个交易......并且分支机构和总部的ID可能不同。 – Nithesh 2010-09-28 12:56:22

2

我会忘记现在的技术方面,并澄清业务/应用逻辑。从您的帖子中可以发现冲突的完全不明确:客户记录,交易,所有数据?为什么会出现冲突?如何解决冲突?当您完全了解数据的情况以及业务预期会发生什么时,您可以查看技术解决方案。

诸如GUID,数字范围和映射表之类的建议是非常有用的,但它根本不清楚您尝试解决什么问题以及业务解决方案。将所有数据物理地放到一个地方很容易(SSIS将是一个很好的起点),真正的问题是你遵循什么规则来合并数据?

+0

在将整个数据更新为主数据时发生冲突。 EG:我在客户表中有ID为5的客户,并且该客户的销售发票参考ID为5(该客户的ID)。而我更新两个条目到主数据库客户ID可能会改变,因此销售发票引用ID(客户ID)不匹配occures ....这发生许多表和交易..... – Nithesh 2010-09-28 10:26:33

+0

我不了解为什么/如何需要更改ID,但听起来像需要某种映射,例如CustomerID 5总是映射到主系统中的27个?映射表易于维护,您只需在更新或插入过程中加入即可。 – Pondlife 2010-09-30 15:19:51