所以我在我的数据库中有一个名为Nodes
的自引用表,用于存储组织的树结构:
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NULL,
[ParentId] [int] NULL,
(+ other metadata columns)
从中我使用HIERARCHYID来管理基于访问级别等的查询。很久以前,我为此编写了一个表值函数tvf_OrgNodes
,在SQL Server 2008到2014年进行了测试和工作,从那以后它一直保持不变,因为它做得很好。然而,现在已经发生了一些变化,因为从路径nvarchars(" / 2/10/8 /")解析HIERARCHYID会导致以下错误,在Google上仅匹配4次点击(!):
Msg 6522, Level 16, State 2, Line 26
A .NET Framework error occurred during execution of user-defined routine or aggregate "hierarchyid":
Microsoft.SqlServer.Types.HierarchyIdException: 24000: SqlHierarchyId operation failed because HierarchyId object was constructed from an invalid binary string.
当改变函数只返回NVARCHAR而不是实际的HIERARCHYID时,路径都看起来很好,从根/
开始,然后是/2/
等等。只需选择{ {1}}也可以。我实际上通过将路径保持为字符串一直工作,直到INSERT进入函数结果,解析那里的路径。但是,当我尝试将重新获得的数据插入到相同模式的表中时,我得到了同样的错误。
所以问题是,这是一个错误,还是有人知道使用HIERARCHYID< - >可能导致此问题的路径字符串的任何(新的?)陷阱?我不知道整个二进制字符串的想法来自哪里。
这是TVF的代码:
HIERARCHYID::Parse('path')
我可能最近为lolz安装了.NET 4.53 aka 4.6。除了reg之外,无法在任何地方找到很多证据:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework \ v4.0.30319 \ SKUs.NETFramework,Version = v4.5.3