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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用CLR函数在Visual Studio 2019中将Hierarchyid转换为字符串相关的知识,希望对你有一定的参考价值。

请告诉我。我尝试为SQL Server写一个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;
    

但是我看到这个错误:enter image description here

我尝试使用Visual Studio解决方案,但无法真正工作。然后使用互联网搜索并找到Nugget,但是我的Nugget已禁用。enter image description here

答案

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

CommonAncestor correctness

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

以上是关于使用CLR函数在Visual Studio 2019中将Hierarchyid转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2019 缺少 SQL CLR VB

在 Visual Studio 2012 中编译启用 CLR 的 C++ 项目时出现 C2248 错误

.NET Framework、CLR 和 Visual Studio 版本号如何相互关联?

visual studio2017中C++节点中为啥没有CLR项,是要添加哪个部件吗?

Visual Studio 2012 上的计算机错误中缺少 GDAL201.dll

C 文件无法在 c++ Visual Studio 中编译