无法绑定多部分标识符(加入结果集)

The multi-part identifier could not be bound (Joining a result set)

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON 
GO
alter procedure [dbo].[Test7]
    @Manufacturer nvarchar(20),
    @literatureType nvarchar(20), 
    @languageCode nvarchar(20),
    @modelCode nvarchar(20),
    @modelYear nvarchar(20)
as 
begin

select PartNum.PartNumber, ToolTip.EngText, ToolTip.FrenchText 
from
(
    SELECT  distinct PMYM.PartNumber 
    FROM ProductModelYearMapping PMYM 
    left outer join ProductMaster PM 
        on  PMYM.PartNumber=PM.PartNumber
    left outer join ProductLiteratureType PLT 
        on  PM.LiteratureType = PLT.Code 
    left outer join Model M 
        on PMYM.ModelCode = M.ModelCode 
) as PartNum
    LEFT OUTER JOIN 
    (
        select PartNumber, EngText, FrenchText 
        from ToolTip
    ) as ToolTiP 
on PartNum.PartNumber = ToolTiP.PartNumber  
WHERE (

        (@Manufacturer IS NULL OR M.Manufacturer = @Manufacturer) AND
        (@literatureType IS NULL OR PM.LiteratureType = @literatureType) AND
            (@languageCode IS NULL OR PM.LanguageCode = @languageCode) AND 
            (@modelCode IS NULL OR PMYM.ModelCode = @modelCode) AND
            (@modelYear IS NULL OR PMYM.startyear <= @modelYear AND PMYM.endyear >= @modelYear)


        )

END

我正在尝试将 table 加入结果集,而且必须根据我所做的某些选择过滤结果。这就是我使用 where 子句的原因。但我似乎收到了这个错误。任何帮助将不胜感激。

问题是您的 WHERE 子句引用了子查询中的别名。有两种方法可以解决此问题。

一个解决方法是将 WHERE 子句移动到存在别名的子查询中:

select PartNum.PartNumber, ToolTip.EngText, ToolTip.FrenchText 
from
(
    SELECT distinct PMYM.PartNumber 
    FROM ProductModelYearMapping PMYM 
    left outer join ProductMaster PM 
        on  PMYM.PartNumber=PM.PartNumber
    left outer join ProductLiteratureType PLT 
        on  PM.LiteratureType = PLT.Code 
    left outer join Model M 
        on PMYM.ModelCode = M.ModelCode 
    WHERE
    (
        (@Manufacturer IS NULL OR M.Manufacturer = @Manufacturer) AND
        (@literatureType IS NULL OR PM.LiteratureType = @literatureType) AND
            (@languageCode IS NULL OR PM.LanguageCode = @languageCode) AND 
            (@modelCode IS NULL OR PMYM.ModelCode = @modelCode) AND
            (@modelYear IS NULL OR PMYM.startyear <= @modelYear AND PMYM.endyear >= @modelYear)
    )
) as PartNum
    LEFT OUTER JOIN 
    (
        select PartNumber, EngText, FrenchText 
        from ToolTip
    ) as ToolTiP 
on PartNum.PartNumber = ToolTiP.PartNumber  

或者您必须在子查询中包含 WHERE 子句使用的那些列,并更改每列的别名,类似于:

select PartNum.PartNumber, ToolTip.EngText, ToolTip.FrenchText 
from
(
    SELECT distinct PMYM.PartNumber,
        M.Manufacturer,
        PM.LiteratureType,
        PM.LanguageCode,
        PMYM.ModelCode,
        PMYM.startyear,
        PMYM.endyear
    FROM ProductModelYearMapping PMYM 
    left outer join ProductMaster PM 
        on  PMYM.PartNumber=PM.PartNumber
    left outer join ProductLiteratureType PLT 
        on  PM.LiteratureType = PLT.Code 
    left outer join Model M 
        on PMYM.ModelCode = M.ModelCode 
) as PartNum
LEFT OUTER JOIN 
(
    select PartNumber, EngText, FrenchText 
    from ToolTip
) as ToolTiP 
    on PartNum.PartNumber = ToolTiP.PartNumber  
WHERE 
(
    (@Manufacturer IS NULL OR PartNum.Manufacturer = @Manufacturer) AND
    (@literatureType IS NULL OR PartNum.LiteratureType = @literatureType) AND
    (@languageCode IS NULL OR PartNum.LanguageCode = @languageCode) AND 
    (@modelCode IS NULL OR PartNum.ModelCode = @modelCode) AND
    (@modelYear IS NULL OR PartNum.startyear <= @modelYear AND PartNum.endyear >= @modelYear)
)