Sql 使用HIERARCHYID时尝试获取祖先的列值
我正在评估HIERARCHYID数据类型,看看它是否能满足我对项目的需求。我希望使用它来获取给定员工ID的经理。我正在查看AdventureWorks DB(2012版)中的表,特别是Person.Person和HumanResources.employee表 我的问题是这样的:Sql 使用HIERARCHYID时尝试获取祖先的列值,sql,sql-server,sql-server-2008,sql-server-2008-r2,sql-server-2012,Sql,Sql Server,Sql Server 2008,Sql Server 2008 R2,Sql Server 2012,我正在评估HIERARCHYID数据类型,看看它是否能满足我对项目的需求。我希望使用它来获取给定员工ID的经理。我正在查看AdventureWorks DB(2012版)中的表,特别是Person.Person和HumanResources.employee表 我的问题是这样的: SELECT pp.LastName + ', ' + pp.FirstName AS Name, CAST(hre.NationalIdNumber AS BIGINT) AS Id, hr
SELECT
pp.LastName + ', ' + pp.FirstName AS Name,
CAST(hre.NationalIdNumber AS BIGINT) AS Id,
hre.LoginID,
hre.OrganizationNode.GetAncestor(1) AS ManagerId,
hre.JobTitle,
hre.BirthDate,
hre.MaritalStatus,
hre.Gender,
hre.HireDate
FROM
Person.Person pp
INNER JOIN
HumanResources.Employee hre ON pp.BusinessEntityID = hre.BusinessEntityID
现在我预料到了这一点,因为getAncenter()是一个CLR函数,所以我本来可以像hre.OrganizationNode.getAncenter(1.NationaldNumber)那样作为ManagerId来执行,但我被告知我不值得这么快
我做错了什么
以后编辑
玩游戏让我想到了这一点,但这并不是最优的(或者是吗?)
一个相关的子查询似乎为我做到了这一点:
SELECT
pp.LastName + ', ' + pp.FirstName AS Name,
CAST(hre.NationalIdNumber AS BIGINT) AS Id,
hre.LoginID,
(
SELECT NationalIDNumber
FROM HumanResources.Employee AS m
WHERE OrganizationNode = hre.OrganizationNode.GetAncestor(1)
)AS ManagerId,
hre.JobTitle,
hre.BirthDate,
hre.MaritalStatus,
hre.Gender,
hre.HireDate
FROM
Person.Person pp
INNER JOIN
HumanResources.Employee hre ON pp.BusinessEntityID = hre.BusinessEntityID
谢谢你,本,这比我的工作要简单
SELECT
pp.LastName + ', ' + pp.FirstName AS Name,
CAST(hre.NationalIdNumber AS BIGINT) AS Id,
hre.LoginID,
(
SELECT NationalIDNumber
FROM HumanResources.Employee AS m
WHERE OrganizationNode = hre.OrganizationNode.GetAncestor(1)
)AS ManagerId,
hre.JobTitle,
hre.BirthDate,
hre.MaritalStatus,
hre.Gender,
hre.HireDate
FROM
Person.Person pp
INNER JOIN
HumanResources.Employee hre ON pp.BusinessEntityID = hre.BusinessEntityID