客户将数据库从 SQL Server 2000 迁移到 2012。
他们的申请后来遇到了麻烦。原因是以下函数调用:
SELECT {fn curtime() }
在 SQL 2000 上返回日期 + 时间('2017-01-20 07:24:26.997'),但在 SQL 2012 上只返回时间部分('07:24:26.997')。
兼容模式不能再设置为 90 (SQL 2005)。
鉴于无法更改应用程序,是否有其他解决方案可以解决此问题?
客户将数据库从 SQL Server 2000 迁移到 2012。
他们的申请后来遇到了麻烦。原因是以下函数调用:
SELECT {fn curtime() }
在 SQL 2000 上返回日期 + 时间('2017-01-20 07:24:26.997'),但在 SQL 2012 上只返回时间部分('07:24:26.997')。
兼容模式不能再设置为 90 (SQL 2005)。
鉴于无法更改应用程序,是否有其他解决方案可以解决此问题?
有人可以让我更好地了解兼容模式功能吗?它的行为与我预期的不同。
据我了解的兼容性模式,它是关于 SQL Server 各个版本之间某些语言结构的可用性和支持。
它不影响数据库引擎版本的内部工作。它将尝试阻止使用早期版本中尚不可用的功能和结构。
我刚刚在 SQL Server 2008 R2 中创建了一个兼容级别为 80 的新数据库。创建了一个带有单个 int 列的表并用几行填充它。
然后执行一个带有row_number()
函数的 select 语句。
我的想法是,由于 row_number 函数是在 2005 年才引入的,这会在兼容 80 模式下引发错误。
但令我惊讶的是,这很好用。然后,当然,只有在您“保存某些内容”时才会评估兼容规则。所以我为我的 row_number 语句创建了一个存储过程。
存储过程的创建很顺利,我可以完美地执行它并获得结果。
有人可以帮助我更好地理解兼容模式的工作原理吗?我的理解显然是有缺陷的。