我在 C# 中创建了一个函数,它允许我将记录及其相关子项复制到同一数据库中的新记录和新相关子项中。(这适用于允许将以前的作品用作新作品的模板的应用程序。)
无论如何,它工作得很好......这是它如何完成副本的描述:
它使用每条记录的当前主键填充基于内存的两列查找表。接下来,当它单独创建每个新副本记录时,它使用新记录的身份 PK [从 SCOPE_IDENTITY() 检索] 更新查找表。现在,当它复制任何相关的孩子时,它可以查找新的父 PK 以在新记录上设置 FK。
在测试中,只需一分钟就可以在 SQL Server 2005 Express Edition 的本地实例上复制关系结构。不幸的是,事实证明它的生产速度非常慢!我的用户正在通过 LAN 与我们的 SQL Server 处理每条父记录的 60,000 多条记录!虽然我的复制功能仍然有效,但这些记录中的每一个都代表一个单独的 SQL UPDATE 命令,它以大约 17% 的 CPU 从其正常的 2% 空闲加载 SQL Server。我刚刚完成了 50,000 条记录副本的测试,花了将近 20 分钟!
有没有办法在 SQL 查询或存储过程中复制此功能,以使 SQL 服务器完成所有复制工作,而不是从每个客户端通过 LAN 爆破它?
(我们运行的是 Microsoft SQL Server 2005 标准版。)
谢谢!
-德里克