Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用HIERARCHYID时尝试获取祖先的列值_Sql_Sql Server_Sql Server 2008_Sql Server 2008 R2_Sql Server 2012 - Fatal编程技术网

Sql 使用HIERARCHYID时尝试获取祖先的列值

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

我正在评估HIERARCHYID数据类型,看看它是否能满足我对项目的需求。我希望使用它来获取给定员工ID的经理。我正在查看AdventureWorks DB(2012版)中的表,特别是Person.Person和HumanResources.employee表

我的问题是这样的:

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