为什么我会收到此错误:
多部分标识符无法绑定在第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
答案 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)) + '%';
...