【发布时间】:2019-12-31 16:34:09
【问题描述】:
我不太喜欢数据库,我发现以下困难。我正在开发一个相当旧版本的 SQL Server:
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4042.0 (X64) Mar 26 2015 21:18:04 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
问题是我有这个查询:
SELECT [Sottocategoria]
,[IdSottocategoria]
,[IdCategoria]
,[Note]
FROM [dbo].[PROT_TITOLARIO]
ORDER BY TRY_CONVERT(hierarchyid,'/'+REPLACE(IdSottocategoria,'.','/')+'/')
这会出错:
Msg 195, Level 15, State 10, Line 6
'TRY_CONVERT' is not a recognized built-in function name.
我认为我无法提高数据库的兼容性级别,因为它太旧了,实际上是在这样做:
ALTER DATABASE GHELLA_CRI SET COMPATIBILITY_LEVEL = 110
我收到此错误消息:
Msg 15048, Level 16, State 1, Line 1
Valid values of the database compatibility level are 80, 90, or 100.
所以问题似乎是 SQL Server 2008 似乎不支持这个 TRY_CONVERT 函数。
有没有办法用这个 SQL Server 版本支持的类似的东西来替换它?
这里是一个查询示例:https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=c0650397514372818b10958901c98add
【问题讨论】:
-
请向我们展示样本数据。在大多数情况下,
TRY_CONVERT无法做到普通CONVERT也无法做到。 -
您能发布一些无法转换的示例值吗?一种解决方案是检测无法转换为 hierarchyid 的字符串并跳过它们。
-
TRY_CONVERT是在 SQL Server 2012 中添加的。文档不会告诉您这一点,因为 SQL Server 2008 现在完全不支持了;所以TRY_CONVERT在所有支持的 SQL Server 版本中都可用。 -
你的自定义数据类型
hierarchyId的定义是什么? -
仅供参考,这是this question的后续内容。
标签: sql sql-server database sql-server-2008 sql-server-2008-r2