在 visual studio 2019 中使用 CLR 函数将 Hierarchyid 转换为字符串

Use CLR function for convert Hierarchyid to string in visual studio 2019

请指教。 我尝试为 SQL 服务器编写 CLR 函数。 我使用 Microsoft 文档编写以下函数 Ref-LINK 使用 CLR 查找祖先 涉及层次结构中两个节点的常见操作是查找最低的公共祖先。这可以用 Transact-SQL 或 CLR 编写,因为 hierarchyid 类型在两者中都可用。推荐使用CLR,因为性能会更快。

使用以下 CLR 代码列出祖先并查找最低共同祖先:

using Microsoft.SqlServer.Server;
using Microsoft.SqlServer.Types;
using System;
using System.Collections;
using System.Text;

public partial class HierarchyId_Operations
{
    [SqlFunction(FillRowMethodName = "FillRow_ListAncestors")]
    public static IEnumerable ListAncestors(SqlHierarchyId h)
    {
        while (!h.IsNull)
        {
            yield return (h);
            h = h.GetAncestor(1);
        }
    }
    public static void FillRow_ListAncestors(
        Object obj,
        out SqlHierarchyId ancestor
        )
    {
        ancestor = (SqlHierarchyId)obj;
    }

    public static HierarchyId CommonAncestor(
        SqlHierarchyId h1,
        HierarchyId h2
        )
    {
        while (!h1.IsDescendantOf(h2))
            h1 = h1.GetAncestor(1);

        return h1;
    }
}

但是我看到这个错误:

我尝试使用 Visual Studio 解决方案,但实际上并不奏效。 然后使用互联网搜索并找到 Nugget ,但我的 nugget 已禁用。

.NET 代码中的名称 HierarchyId 在文档中似乎是类型 o。 SQLCLR 中只有 SqlHierarchyId。事实上,甚至在与该文档页面相关的 3 个已解决问题之一中提到了这一点(在该页面的底部,单击 "Closed" 选项卡):

CommonAncestor correctness

由 "FYfrog" 于 2019-06-27 打开。