Застрял при использовании CASE с LIKE Оператор. В приведенной ниже хранимой процедуре все параметры не являются обязательными, поэтому, когда пользователь не вводит PatientName для поиска, то нижеследующий запрос не возвращает ожидаемые результаты, поскольку оператор LIKE находится за пределами, который является очевидным. Я искал что-то вроде этого, так что, когда пользователь не входит PatientName будетКорпус с аналогичным оператором
(c.LastName + c.Firstname) = @PatientNAme else
(c.LastName + c.Firstname) like '%' + @PatientNAme + '%'
*
(c.LastName + c.Firstname) (
CASE @PatientName
WHEN '' THEN @PatientName = (c.LastName + c.Firstname)
ELSE like '%' + @PatientName + '%'
END
)
*
CREATE proc [dbo].[SearchParkPrescriptionDetails]
@DispenseID INT,
@ParkPrescriptionReasonId INT,
@PrescriptionParkType VARCHAR(50),
@PatientName VARCHAR(120),
@User VARCHAR(120),
@fromdate DATETIME,
@todate DATETIME,
@DateWiseSearch VARCHAR(3),
@PatientID INT
AS
BEGIN
SELECT
a.ParkPrescriptionId
, a.DispenseID
, a.ParkPrescriptionReasonId
, a.ParkDate
, (c.LastName + ' ' + c.Firstname) AS PatientName
, d.PrescriptionType
, e.ParkPrescriptionReason
, a.Notes
, b.ItemCount AS TotalItems
, g.ExemptionReason
,a.[User]
FROM
ParkPrescriptionDetails a
INNER JOIN
Dis_DispenseMaster b
ON
a.DispenseID=b.DispenseID
INNER JOIN
Patient c
ON
b.PatientId = c.PatientId
INNER JOIN
Lookup_PrescriptionType d
ON
b.PrescriptionTypeId = d.PrescriptionTypeId
INNER JOIN
Lookup_ParkPrescriptionReason e
ON
a.ParkPrescriptionReasonId = e.ParkPrescriptionReasonId
LEFT JOIN
Lookup_ExemptionReason g
ON
b.ExemptionReasonId = g.ExemptionReasonId
WHERE
CONVERT(DATE, a.ParkDate) BETWEEN @fromdate AND @todate
AND a.RecallStatus = 'N'
AND a.DispenseID = (CASE @DispenseID WHEN 0 THEN a.DispenseID ELSE @DispenseID END)
AND b.PatientId = (CASE @PatientID WHEN 0 THEN b.PatientId ELSE @PatientID END)
AND a.ParkPrescriptionReasonId = (CASE @ParkPrescriptionReasonId WHEN 0 THEN a.ParkPrescriptionReasonId ELSE @ParkPrescriptionReasonId END)
AND
(
c.LastName + c.Firstname
) LIKE (CASE @PatientName WHEN '' THEN (c.LastName + c.Firstname) ELSE '%' + @PatientName + '%' END)
AND a.[User] LIKE (CASE @User WHEN '' THEN a.[User] ELSE '%' + @User + '%' END)
AND b.ParkPrescription = (CASE @PrescriptionParkType WHEN '' THEN b.ParkPrescription WHEN 'Park' THEN 'Y' END)
AND b.RecallPrescription = (CASE @PrescriptionParkType WHEN '' THEN b.RecallPrescription WHEN 'Recall' THEN 'Y' END)
AND a.IsDeleted =0
END
========== Изменено это так. Является ли это совершенное ===========
(c.LastName + ' ' + c.Firstname) = (
CASE @PatientName
WHEN '' THEN (c.LastName + ' ' + c.Firstname)
ELSE '%' + @PatientName + '%'
END
)
Спасибо за предложение. Попробует. – user2859242
Я просто приведу вам пример. Ты можешь измениться. – NEER