Sevki Asked: 2011-01-04 14:32:12 +0800 CST2011-01-04 14:32:12 +0800 CST 2011-01-04 14:32:12 +0800 CST 从 SQL Server 2008 降级到 2005 772 使用 SQL 2008 构建的数据库文件与 2005 不兼容。有解决方法吗? sql-server-2008 sql-server-2005 5 个回答 Voted Jeremiah Peschka 2011-01-04T14:55:34+08:002011-01-04T14:55:34+08:00 您可以将数据从一个 SQL Server 实例 BCP 到另一个实例。这将是将数据从一个版本复制到另一个版本的最快方法。根据数据量,可能需要很长时间。 Best Answer BradC 2011-01-05T08:09:20+08:002011-01-05T08:09:20+08:00 无需第三方工具。SQL Server 2008 Management Studio 为我们提供了一个非常强大的工具来向下转换数据库,因为他们在“脚本数据库”向导中添加了“脚本数据”选项。 只需右键单击 SQL2008 SSMS 中的数据库,然后转到任务,然后“生成脚本” 浏览向导,确保在表格/视图选项下为“脚本数据”选择“真”。选择所有对象,然后运行它在 2005 服务器上创建的脚本。(请记住,如果原始数据库非常大,创建的脚本可能会很大!) 请注意,您甚至可以针对 SQL2005 服务器运行该向导,以将 SQL2005 数据库下转换为 SQL2000(当然,您需要在工作站上安装 2008 工具)。 David Spillett 2011-01-04T15:14:04+08:002011-01-04T15:14:04+08:00 不幸的是,据我所知,没有直接的方法可以将数据库从 2008 年的格式降级到 2005 年的格式。 我过去这样做的方式(实际上是使用旧版本的 SQL Server,但过程是相同的)是: 在 SQL2008 实例上恢复数据库(如果尚未完成) 在 SQL2005 实例上构建具有正确结构(表、索引、约束、视图、过程、触发器等)的空数据库。希望您可以从现有的构建过程和/或源代码中执行此操作,但如果没有,您可以使用 SQL Server 管理器为 2005 数据库中的所有内容创建脚本,并在 2008 实例中的空白处运行结果。 确保两个实例可以互相看到(即,如果实例位于不同的机器上,则没有防火墙阻止连接)并使用sp_addlinkedserver链接它们。 将所有数据从一个数据库复制到另一个数据库。如果触发器中没有外键约束和类似问题需要担心,您可以将 DB 链接在一起并在表列表中游标(从 sys.objects 中选择它们)并运行 INSERT destinationserver.destinationdb.schema.table SELECT * FROM sourcedb.schema.table (或者INSERT schema.table SELECT * FROM sourceserver.sourcedb.schema.table如果您已经以这种方式链接了实例) 对于每个表。如果您确实有表间一致性强制约束和触发器,那么您当然需要对这些操作的顺序更加聪明,特别是如果您有循环约束,例如具有基于自身的约束的表(一个持有层次结构数据,作为一个可能的例子)。 首先复制数据并在第 3 步之后添加所有其他结构(索引、过程、触发器等)可能更有效。这避免了由约束和触发器引起的行插入排序问题,并在end 理论上应该比在添加所有数据时构建它们更快 - 尽管如果您的表上有任何聚集索引,请在添加数据之前创建这些索引,因为事后创建它们不会更快。 当然,这一切都假设您的任何对象都没有使用 SQL 2008 特定功能 - 如果他们这样做,您将希望在重建模式时出现错误时发现并修复此类问题。如果您的任何代码依赖于官方未定义的行为,而这些行为恰好在 SQL Server 版本之间有所不同,那么您可能会有一些更微妙和难以捉摸的错误需要在以后寻找和解决。 CoderHawk 2011-01-04T21:30:01+08:002011-01-04T21:30:01+08:00 我遇到了类似的情况,并使用数据库发布向导从 SQL Server 2008 数据库为 SQL Server 2005 编写模式和数据脚本。 SQL Server 托管 Web 服务(和工具包) 数据库发布向导 Mbongeni 2013-02-01T06:21:39+08:002013-02-01T06:21:39+08:00 您首先必须编写数据库脚本并确保在版本上您指定了要降级到的类型。并将数据从较高版本复制到较低版本 SQL 数据比较将为您解决问题。 祝你好运!
您可以将数据从一个 SQL Server 实例 BCP 到另一个实例。这将是将数据从一个版本复制到另一个版本的最快方法。根据数据量,可能需要很长时间。
无需第三方工具。SQL Server 2008 Management Studio 为我们提供了一个非常强大的工具来向下转换数据库,因为他们在“脚本数据库”向导中添加了“脚本数据”选项。
只需右键单击 SQL2008 SSMS 中的数据库,然后转到任务,然后“生成脚本”
浏览向导,确保在表格/视图选项下为“脚本数据”选择“真”。选择所有对象,然后运行它在 2005 服务器上创建的脚本。(请记住,如果原始数据库非常大,创建的脚本可能会很大!)
请注意,您甚至可以针对 SQL2005 服务器运行该向导,以将 SQL2005 数据库下转换为 SQL2000(当然,您需要在工作站上安装 2008 工具)。
不幸的是,据我所知,没有直接的方法可以将数据库从 2008 年的格式降级到 2005 年的格式。
我过去这样做的方式(实际上是使用旧版本的 SQL Server,但过程是相同的)是:
INSERT destinationserver.destinationdb.schema.table SELECT * FROM sourcedb.schema.table
(或者
INSERT schema.table SELECT * FROM sourceserver.sourcedb.schema.table
如果您已经以这种方式链接了实例)对于每个表。如果您确实有表间一致性强制约束和触发器,那么您当然需要对这些操作的顺序更加聪明,特别是如果您有循环约束,例如具有基于自身的约束的表(一个持有层次结构数据,作为一个可能的例子)。
首先复制数据并在第 3 步之后添加所有其他结构(索引、过程、触发器等)可能更有效。这避免了由约束和触发器引起的行插入排序问题,并在end 理论上应该比在添加所有数据时构建它们更快 - 尽管如果您的表上有任何聚集索引,请在添加数据之前创建这些索引,因为事后创建它们不会更快。
当然,这一切都假设您的任何对象都没有使用 SQL 2008 特定功能 - 如果他们这样做,您将希望在重建模式时出现错误时发现并修复此类问题。如果您的任何代码依赖于官方未定义的行为,而这些行为恰好在 SQL Server 版本之间有所不同,那么您可能会有一些更微妙和难以捉摸的错误需要在以后寻找和解决。
我遇到了类似的情况,并使用数据库发布向导从 SQL Server 2008 数据库为 SQL Server 2005 编写模式和数据脚本。
SQL Server 托管 Web 服务(和工具包)
数据库发布向导
您首先必须编写数据库脚本并确保在版本上您指定了要降级到的类型。并将数据从较高版本复制到较低版本 SQL 数据比较将为您解决问题。
祝你好运!