SQL无效的列名(我认为这是因为空值)

SQL无效的列名(我认为这是因为空值),sql,sql-server-2008,select,Sql,Sql Server 2008,Select,我有一个嵌套的SQL select语句,其中子select依赖于父select中的值。但是,我认为由于空值,查询失败。 如何让查询在每次遇到空值时忽略子select语句 我的问题是: SELECT ID, Hierarchy, Name, Hierarchy.GetLevel() AS Level, Hierarchy.GetAncestor(1) AS ParentHierarchy, (SELECT ID FROM SpecProducts

我有一个嵌套的SQL select语句,其中子select依赖于父select中的值。但是,我认为由于空值,查询失败。 如何让查询在每次遇到空值时忽略子select语句

我的问题是:

SELECT ID, Hierarchy, Name, Hierarchy.GetLevel() AS Level, Hierarchy.GetAncestor(1) AS ParentHierarchy,
        (SELECT ID
         FROM  SpecProducts
         WHERE (Hierarchy = ParentHierarchy)) AS ParentHierarchy

FROM          SpecProducts AS SpecProducts_1
WHERE        (EnableDisable IS NULL)
ORDER BY Hierarchy
以下是我的错误消息:

列名“ParentHierarchy”无效

********************编辑:24/04/2012-14:50*****************

谢谢你指出错误。不幸的是,我仍然遇到同样的问题

以下是更新后的查询:

SELECT ID, Hierarchy, Name, Hierarchy.GetLevel() AS Level, Hierarchy.GetAncestor(1) AS ParentHierarchy,
                         (SELECT  ID
                          FROM    SpecProducts
                          WHERE  (Hierarchy = ParentHierarchy)) AS ParentID
FROM    SpecProducts AS SpecProducts_1
WHERE   (EnableDisable IS NULL)
ORDER BY Hierarchy
错误消息: 列名“ParentHierarchy”无效

问题是否是因为ParentHierarchy值可以为NULL

**编辑************

好的,这是有效的:

SELECT   ID, Hierarchy, Name, Hierarchy.GetLevel() AS Level, Hierarchy.GetAncestor(1) AS ParentHierarchy,
         (SELECT   ID AS IDd
          FROM     SpecProducts
          WHERE    (Hierarchy = SpecProducts_1.Hierarchy.GetAncestor(1))) AS ParentID
FROM            SpecProducts AS SpecProducts_1
WHERE        (EnableDisable IS NULL)
ORDER BY Hierarchy

您有两个名为ParentHierarchy的字段。您需要将第二个字段更改为其他名称。此外,您正在尝试在嵌套的SELECT语句中引用别名。请尝试引用GetAncestor1方法。

使用ParentHierarchy名称两次。试一试

SELECT ID, ..., Hierarchy.GetAncestor(1) AS ParentHierarchy,
    (SELECT ID
     FROM  SpecProducts
     WHERE (Hierarchy = ParentHierarchy)) AS ParentHierarchyID ...

这是因为您试图在主SELECT语句中为两个不同的列指定ParentHierarchy名称:

Hierarchy.GetAncestor(1) AS ParentHierarchy


是打字错误还是你将两列命名为ParentHierarchy?啊,是的,我有!谢谢你发现这个。非常感谢您的帮助此操作确实运行,但是我没有得到ParentHierarchy2值的正确结果。**请注意,ParentHierarchy2实际上应该称为ParentID。
(SELECT ID ...) AS ParentHierarchy
SELECT ID, Hierarchy, Name, Hierarchy.GetLevel() AS Level, Hierarchy.GetAncestor(1) AS ParentHierarchy,
        (SELECT ID
         FROM  SpecProducts as sp2
         WHERE (sp2.Hierarchy = SpecProducts_1.Hierarchy)) AS ParentHierarchy2

FROM          SpecProducts AS SpecProducts_1
WHERE        (EnableDisable IS NULL)
ORDER BY Hierarchy