无法绑定多部分标识符

时间:2012-12-22 16:35:34

标签: sql sql-server

为什么我会收到此错误:

  

多部分标识符无法绑定在第18行上   无法绑定多部分标识符“ShipTB.sh_Type”   第32行多部分标识符“ShipTB.sh_Type”不可能   界。

CREATE PROCEDURE DocumentReportProc   
(
   @searchOpt tinyint,
   @keyser nvarchar (50),
   @usertypeid tinyint output
)
as
SELECT     
    ExceptionTB.excep_ref, ExceptionTB.emo_no, ShipTB.sh_Type
FROM ExceptionTB 
INNER JOIN ShipTB ON ExceptionTB.emo_no = ShipTB.Emo_No 
where ExceptionTB.excep_ref like cast(@keyser as varchar(50)) + '%'

IF  ((ShipTB.sh_Type)=('تجارية'))
BEGIN

 SELECT 
    ExceptionTB.excep_ref, 
    ExceptionTB.emo_no, 
    ExceptionTB.broker, 
    ExceptionTB.r_date, 
    ShipTB.S_Name, 
    ShipTB.sh_Type, 
    ArrivalNotiDate.Arri_noti_date, 
    ArrivalNotiDate.port, 
    CargoCertificate.[1], 
    CargoCertificate.[2], 
    CargoCertificate.[3], 
    CargoCertificate.[4], 
    CargoCertificate.[5],  
    CargoCertificate.[6], 
    CargoCertificate.[7], 
    CargoCertificate.[8]
  FROM         ExceptionTB 
  INNER JOIN  ShipTB ON ExceptionTB.emo_no = ShipTB.Emo_No 
  INNER JOIN  ArrivalNotiDate ON ExceptionTB.excep_ref = ArrivalNotiDate.exp_ref 
  INNER JOIN  CargoCertificate ON ExceptionTB.excep_ref = CargoCertificate.excep_ref    
  where ExceptionTB.excep_ref like cast(@keyser as varchar(50)) + '%'   

END      
IF  (ShipTB.sh_Type='سياحية')
BEGIN
 SELECT     
    ExceptionTB.excep_ref,
    ExceptionTB.emo_no, 
    ExceptionTB.broker, 
    ExceptionTB.r_date, 
    ShipTB.S_Name, 
    ShipTB.sh_Type, 
    ArrivalNotiDate.Arri_noti_date, 
    ArrivalNotiDate.port, 
    PassengerCertificate.[1], 
    PassengerCertificate.[2], 
    PassengerCertificate.[3], 
    PassengerCertificate.[4], 
    PassengerCertificate.[5], 
    PassengerCertificate.[6]
  FROM         dbo.ExceptionTB 
  INNER JOIN ShipTB ON ExceptionTB.emo_no = ShipTB.Emo_No  
  INNER JOIN ArrivalNotiDate ON ExceptionTB.excep_ref = ArrivalNotiDate.exp_ref  
  INNER JOIN PassengerCertificate ON ExceptionTB.excep_ref = PassengerCertificate.excep_ref  
  where ExceptionTB.excep_ref like cast(@keyser as varchar(50)) + '%'                     
END                                     

1 个答案:

答案 0 :(得分:0)

你不能这样做。 IF语句中的ShipTB.sh_Type是一个结果集,它是一个包含多个值的字段。此外,它不能在SELECT子句之外引用。如果此字段ShipTB.sh_Type应该只包含一个值,那么您可以将其选择为@type之类的标量变量,然后将其置于条件中。

否则,如果此字段ShipTB.sh_Type包含更多值,那么我认为您正在尝试进行条件连接,在这种情况下,您可以在一个查询中执行此操作,如下所示:

...

SELECT     
  ExceptionTB.excep_ref,
  ExceptionTB.emo_no, 
  ExceptionTB.broker, 
  ExceptionTB.r_date, 
  ShipTB.S_Name, 
  ShipTB.sh_Type, 
  ArrivalNotiDate.Arri_noti_date, 
  ArrivalNotiDate.port, 
  PassengerCertificate.[1], 
  PassengerCertificate.[2], 
  PassengerCertificate.[3], 
  PassengerCertificate.[4], 
  PassengerCertificate.[5], 
  PassengerCertificate.[6]
  CargoCertificate.[1], 
  CargoCertificate.[2], 
  CargoCertificate.[3], 
  CargoCertificate.[4], 
  CargoCertificate.[5],  
  CargoCertificate.[6], 
  CargoCertificate.[7], 
  CargoCertificate.[8]
FROM       ExceptionTB 
INNER JOIN ShipTB                
        ON ExceptionTB.emo_no    = ShipTB.Emo_No 
INNER JOIN ArrivalNotiDate       
        ON ExceptionTB.excep_ref = ArrivalNotiDate.exp_ref 
INNER JOIN CargoCertificate      
        ON ExceptionTB.excep_ref = CargoCertificate.excep_ref 
       AND ShipTB.sh_Type        = 'تجارية'
INNER JOIN PassengerCertificate  
        ON ExceptionTB.excep_ref = PassengerCertificate.excep_ref  
       AND ShipTB.sh_Type        = 'سياحية'
WHERE      ExceptionTB.excep_ref LIKE CAST(@keyser as varchar(50)) + '%';

...