【问题标题】:Batch updation in SQL server 2008SQL Server 2008 中的批量更新
【发布时间】:2010-09-28 06:49:52
【问题描述】:

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

例如:我在分支 A 上有一条 ID 为 10 的记录 也是一个引用 id 10(外键)的事务,但在将其保存到主数据库时,唯一 ID 可能会更改,因此事务不匹配....

请帮我解决这个问题...

先谢谢大家....

【问题讨论】:

    标签: sql-server erp


    【解决方案1】:

    我现在会忘记技术方面并澄清业务/应用程序逻辑。从您的帖子中根本不清楚冲突可能出现在哪里:客户记录,交易,所有数据?为什么会产生冲突?冲突如何解决?当您准确了解数据正在发生什么以及业务预期会发生什么时,您就可以研究技术解决方案。

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

    【讨论】:

    • 在将整个数据更新为主数据时发生冲突。 EG:我在客户表中有 ID 为 5 的客户,以及该客户的销售发票,参考 ID 为 5(该客户的 ID)。当我将两个条目都更新到主数据库时,客户 ID 可能会更改,因此会发生销售发票参考 ID(客户 ID)不匹配......这发生在许多表格和交易中......
    • 我不明白您为什么/如何需要更改 ID,但听起来您需要某种映射,例如CustomerID 5 在主系统中总是映射到 27?映射表易于维护,您只需在更新或插入期间加入它即可。
    【解决方案2】:
    The master server and DB is updated daily by batch updation
    

    不知道具体如何进行批量更新或数据库有多大以及有多少表面临此类问题,一种可能的通用方法是维护映射表

    在您的批量更新逻辑中,

      1234563两个ID之间的
    • 对于现有记录,您将加入映射表并使用映射表中的 masterID 更新记录

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

    此外,这取决于您的设计,但通常有一个

    源数据库 --> 暂存数据库 --> 目标数据库

    在你的情况下映射到

    分支数据库 --> 暂存数据库 --> 主数据库

    对于此类 ETL 类型的任务。在这种情况下,映射表可能应该驻留在暂存数据库中,但是如果您没有这样的设计(您确实应该这样做),这些映射表也可以驻留在目标数据库中,即主数据库中 p>

    【讨论】:

    • 我总共有 300 个表,其中大约 100 个表可能会遇到这个问题。我可以为这么多表执行此操作,还是有任何其他方法?...@nithu@
    • 您可以轻松地为 100 个表执行此操作,但这将对您的 ETL 包设计的工作方式进行重大更改!但是,我没有看到任何摆脱困境的简单方法,因为这似乎是一个重大的设计缺陷——您在所有单独的数据库中分别生成 ID。我认为这个建议更像是一种解决方法,但如果你有足够的条件,你甚至可以考虑重新设计应用程序,让你只在一个地方生成 ID。这实际上是解决所有问题的最简单方法!
    【解决方案3】:

    为了克服这个问题,您可以使用uniqueidentifier 作为分支ID 的数据类型。

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

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

    【讨论】:

    • 感谢您的回复...但是使用此 ID 如何识别在与该 ID 对应的分支机构中完成的先前交易...以及分支机构和总部中的 ID可能会有所不同。
    猜你喜欢
    • 2012-01-10
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多