【问题标题】:Use CLR function for convert Hierarchyid to string in visual studio 2019在 Visual Studio 2019 中使用 CLR 函数将 Hierarchyid 转换为字符串
【发布时间】:2020-06-13 22:10:24
【问题描述】:

请给我建议。 我尝试为 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 已禁用。

【问题讨论】:

    标签: c# sql-server clr sqlclr hierarchyid


    【解决方案1】:

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

    CommonAncestor correctness

    由“FYfrog”于2019-06-27开业。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-09
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2019-06-05
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多