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

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

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

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

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

  • FK 约束是错误的。它试图在不存在的列上创建 FK。
  • 它正在尝试插入具有重复键错误的记录。
  • 它尝试创建相同的对象两次。

知道这是怎么发生的吗?此 SQL 脚本是在我尝试恢复它的几分钟前由 SQL Server Management Studio 生成的,并且未经修改。

为什么这会生成无效的 SQL 文件?它不是只描述 SQL2008 数据库吗?由于我们正在使用它,所以它应该是有效的。

尤其是重复键插入错误让我感到困惑。如果 SQL 脚本中存在键约束,那么 SQL2008 表中也一定存在相同的内容。那么我们如何才能在其中找到违反该键约束的行呢?

更新:

这与降级到 SQL2005 有关。我运行了与 SQL2008 兼容的脚本,然后转身在刚刚来自的同一个 SQL 实例上运行生成的脚本,并且它运行没有错误。所以当我尝试使其与 SQL2005 兼容时,问题就出现了。

另一个更新:

我重新生成了与 SQL2005 兼容的脚本,然后转身在 SQL2008 实例上运行它。它运行良好。所以...

  • SQL2008 脚本 --> SQL2008 实例有效
  • SQL2005 脚本 --> SQL2008 实例有效
  • SQL2005 脚本 --> SQL2005 实例不起作用

解决方案:

您无法为 SQL2005 创建脚本并在 Express 上运行它。我切换到了 Standard,并且运行良好。

答案1

问题是我试图导入到 SQL 2005 Express。我切换到 SQL 2005 Standard,然后就可以无错误地运行脚本。

答案2

我不知道现在这是否是 SQL Server 2008 Management Studio 的内置功能,但在 2005 年,如果你使用单独的下载,你在编写脚本时会得到更多选项,SQL Server 数据库发布向导在这里获取:Microsoft 下载中心

这对你有点用处。

相关内容