【发布时间】: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