为什么SQL 2008“生成脚本…”实用程序会生成无效的SQL脚本?

我有一个SQL2008数据库,需要恢复到SQL2005实例。

我已经通过“生成脚本…”向导,将其设置为SQL2005兼容性,并生成了一个62MB的SQL脚本。

当我在SQL2005实例上运行它时,它会抛出各种错误,其中一些错误非常奇怪,因为它们描述了一个无效的数据库

  • FK限制是错误的。 它试图在不存在的列上创buildFK。
  • 它试图插入具有重复键错误的logging。
  • 它试图两次创build相同的对象。

任何想法如何发生? 这个SQL脚本是在我尝试恢复它之前几分钟由SQL Server Management Studio生成的,并没有被修改。

为什么这会产生一个无效的SQL文件? 它不只是描述了SQL2008数据库,这大概是有效的,因为我们正在使用它?

特别是,重复键插入错误神秘我。 如果在SQL脚本中有一个关键的约束,那么在SQL2008表中必须有相同的东西。 那么我们怎么能在那里得到违反这个关键约束的行呢?

更新:

这是降级到SQL2005的事情。 我运行的脚本是SQL2008兼容的,然后转身,并在刚刚从相同的SQL实例运行得到的脚本,它运行没有错误。 所以当我尝试使SQL2005兼容时,问题就来了。

另一个更新:

我重新编写了脚本,使其兼容SQL2005,然后在SQL2008实例上运行。 它工作正常。 所以…

  • SQL2008脚本 – > SQL2008实例WORKS
  • SQL2005脚本 – > SQL2008实例WORKS
  • SQL2005脚本 – > SQL2005实例不工作

解:

您不能为SQL2005创build脚本并在Express上运行它。 我切换到标准,它工作正常。

问题是我试图导入到SQL 2005 Express。 我切换到SQL 2005标准,我能够没有错误地运行脚本。

我不知道这是SQL Server 2008pipe理工作室,但在2005年,如果您使用单独的下载, SQL Server数据库发布向导脚本时有更多的select在这里获取它: Microsoft下载中心

这对你有一些用处。