2015-01-15 21 views
1
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 

我想加入一個帶有結果集的表,並且結果必須根據我做出的某些選擇進行過濾。這就是我使用where子句的原因。但我似乎得到這個錯誤。任何幫助將不勝感激。無法綁定多部分標識符(加入結果集)

+0

您的WHERE子句是從子查詢中引用標識符。您必須將WHERE移動到子查詢中,或者需要包含這些列並更改引用。 – Taryn 2015-01-15 16:36:51

+0

@bluefeet:謝謝:)解決了這個問題。 :) – user2272525 2015-01-15 16:48:31

回答

0

問題是您的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) 
) 
相關問題