在SQL 2012服务器上测试SQL Server 2008兼容性的测试脚本

3

在新版本的SQL Server上测试脚本是否与旧版本兼容,是否可能?

是否有办法告诉服务器不要理解所有新功能(新函数名称、新语法糖等)?

这样我们就可以省去VM托管旧的SQL Server版本,并释放我们测试环境VM主机上宝贵的资源。


你可以在SQL Server内部将兼容模式设置为较低的版本。 - undefined
1个回答

0

不必保留旧的服务器版本,你可以在主(当前)服务器上创建一个用于测试的数据库,然后将该数据库的兼容性设置为较低的版本。

ALTER DATABASE database_name   
SET COMPATIBILITY_LEVEL = 100    -- 100 = Engine v10.x = SQL 2008

更多信息请参阅:https://learn.microsoft.com/zh-cn/sql/t-sql/statements/alter-database-transact-sql-compatibility-level

可能更简单的方法是将较低级别的数据库从旧服务器分离,将相关文件(MDF+LDF)复制到新服务器,然后在新服务器上附加它。这样做通常不会更改兼容性级别,除非它是一个过时的级别,新服务器不再支持。


请注意,SQL数据库上不支持所有与兼容性级别有关的功能。以上是来自微软文章的内容。 - undefined
我尝试在这样的数据库上运行一个已知有错误的脚本。在我们的2008R2服务器上,ALTER DATABASE CURRENT SET RECOVERY SIMPLE 这一行会抛出语法错误("Syntax error at or near CURRENT"),但是在兼容的数据库上却可以正常工作。 - undefined
好的,这可能会有问题,但如果只有一些这样的问题,那么可能有SQL的解决方法。例如,EXEC ('ALTER DATABASE ' + @dbName + ' SET RECOVERY SIMPLE') 在这种情况下可能有效。 - undefined
我认为分离/附加过程有点过度,只需制作完整备份并在新服务器上还原即可获得数据库的完全副本,包括兼容级别(假设旧版本的兼容级别在新版本中仍受支持,如@Serg所指出的那样,如果不支持,则备份将失败并显示“不支持”)。 - undefined
1
你不需要使用CURRENT来表示当前数据库,只需使用ALTER DATABASE SET RECOVERY SIMPLE即可。 - undefined
2
让我们在Peter发布的文档链接中突出显示重要部分。兼容性级别仅提供部分向后兼容性... 所以简短的答案是不可以。它也不适用于生产数据库。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接