在 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" 选项卡):
由 "FYfrog" 于 2019-06-27 打开。
请指教。 我尝试为 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" 选项卡):
由 "FYfrog" 于 2019-06-27 打开。