我有一个需要恢复到 SQL2005 实例的 SQL2008 数据库。
我已经完成了“生成脚本...”向导,将其设置为与 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 上运行它。我切换到标准,它工作得很好。
问题是我试图导入到 SQL 2005 Express。我切换到 SQL 2005 Standard,并且能够正确运行脚本。
我不知道这几天这是否内置于 SQL Server 2008 Management Studio,但在 2005 年,如果您使用单独的下载(SQL Server 数据库发布向导)在编写脚本时有更多选择,请在此处获取:Microsoft 下载中心
这对你有些用处。