使用SQL 2008构建的数据库文件与2005不兼容。是否可以解决?

评论

别忘了还要导出服务器登录信息。

这是因为您在2008年进行开发,而生产服务器仍在2005年吗?您提供的任何解决方案都将延迟不可避免的事情,同时使您的生活陷入困境,因为您可能最终会定期降级。

#1 楼

无需第三方工具。 SQL Server 2008 Management Studio为我们提供了一个非常强大的工具来向下转换数据库,因为他们在“脚本数据库”向导中添加了“脚本数据”选项。只需在SQL2008中右键单击数据库即可。 SSMS,然后转到“任务”,然后“生成脚本”

遍历向导,确保在表/视图选项下为“脚本数据”选择“真”。选择所有对象,然后运行它在2005服务器上创建的脚本。 (请记住,如果原始数据库很大,则创建的脚本可能非常庞大!)

请注意,您甚至可以针对SQL2005服务器运行向导,以将SQL2005数据库下转换为SQL2000。 (当然,您需要在工作站上安装2008工具)。

评论


没有冒犯,但是如果数据库很大,这不是解决方案。在具有几百万行的任何表上尝试该技术(并将varchar(max)视为单列的数据类型),如果Management Studio能够打开并解析此文件,您会很高兴的,但是我很高兴确保它不会打开,它将崩溃。抱歉,但这不是解决此问题的方法,除非数据库很小。

–玛丽安
2011-2-4在16:36

当然,如果数据库太大,只编写数据库结构的脚本,然后使用您喜欢的方法(SSIS,BCP,导入向导)来推送数据。

– BradC
2011年2月7日在18:13

在SSMS 11.0中,似乎没有任何选项可以将数据和结构一起编写脚本。 i.imgur.com/SGkG8oZ.png

– jcollum
2014年11月11日22:30



好的,现在位于“表/视图”选项上方的“脚本的数据类型”下

– jcollum
2014年11月11日在22:39

#2 楼

您可以将数据从一个SQL Server实例BCP到另一个实例。这将是将数据从一个版本复制到另一个版本的最快方法。根据数据量,可能需要很长时间。

评论


根据数据量,几乎总是需要很长时间

–jcolebrand♦
2011年1月5日,下午5:45

是的,肯定会。将大型数据库迁移到旧版本的SQL Server并非易事。

–mrdenny
2011年4月15日在7:32

BCP的好处在于,它将比使用脚本数据更快。是的,它很慢,但是比许多替代方法都快。

–耶利米·佩斯卡(Jeremiah Peschka)
11年4月16日在22:27

#3 楼

据我所知,没有一种直接的方法可以将数据库从2008年的格式降级到2005年。

我过去这样做的方式(实际上是在旧版本的SQL Server中,但是过程将相同)是:


如果尚未完成,则将数据库恢复到SQL2008实例上
使用正确的结构(表,索引,约束, SQL2005实例上的视图,进程,触发器...)。希望您可以从现有的构建过程和/或源代码中执行此操作,但如果没有,则可以使用SQL Server Manager为2005 DB中的所有内容创建脚本,并在2008实例中的空白脚本上运行结果。 >确保两个实例可以相互看见(即,如果实例在不同的计算机上,则没有防火墙阻止连接),并使用sp_addlinkedserver链接它们。
将所有数据从一个DB复制到另一个DB。如果触发器中没有外键约束和类似问题,您可以担心的是,只需将数据库链接在一起,然后在表列表中进行游标(从sys.objects中选择它们),然后运行INSERT destinationserver.destinationdb.schema.table SELECT * FROM sourcedb.schema.table
(或INSERT schema.table SELECT * FROM sourceserver.sourcedb.schema.table)为每个表链接实例)
。如果您确实具有表间一致性强制执行约束和触发器,那么您当然需要对这些操作的顺序更加聪明,特别是如果您具有循环约束,例如具有基于自身的约束的表(一个持有层次结构)数据,作为一个可能的示例。)

首先复制数据并在步骤3之后添加所有其他结构(索引,proc,触发器,...)可能会更有效率。这避免了由约束和触发器引起的行插入排序问题,以及在最后建立索引在理论上应该比在添加所有数据时构建索引要快-尽管如果表上有任何聚集索引,则在添加数据之前先创建它们事后创建起来不会更快。

当然,所有这些都假定您的对象都不使用SQL 2008特定功能-如果这样做,您将希望在重建架构时出现错误时找出并修复这些错误。如果您的任何代码都依赖于正式未定义的行为,而这种行为在SQL Server版本之间发生了变化,那么您可能会遇到一些更微妙和难以捉摸的错误,以供日后查找和解决。

评论


-1,因为与BCP之类的控件相比,它实际上是低效的(选择* into from)。

–jcolebrand♦
2011年1月5日,下午5:46

@jcolebrand的效率足够公平。尽管这项技术是我曾经从事过的一种技术。

– David Spillett
2011年1月5日在10:06



这是一个公平的系统,我只是想由于将来的读者而将其包括在内。您目前有支持,因为这不是问题。 ;)

–jcolebrand♦
2011年1月5日15:15

#4 楼

我遇到了类似的情况,并使用数据库发布向导从SQL Server 2008数据库为SQL Server 2005编写了架构和数据脚本。
SQL Server宿主Web服务(和工具包)
数据库发布向导

#5 楼

首先,必须编写数据库脚本,并确保在指定要降级为的类型的版本上。并将数据从较高版本复制到较低版本,SQL数据比较将为您解决问题。

祝你好运!