I’m trying to create a procedure where it needs to filter the records with where condition by multiple scalar parameters. I’m facing the problem with the column I.[status]
.
In that column the values will be as “pending”, “rejected”, “submitted”. But when the value comes with “All”, I need to select all the status types (pending, rejected, submitted)
x
CREATE PROCEDURE [dbo].[sp_cc_get_Invoices]
(@po_id INT = NULL,
@sortBy VARCHAR(50) = NULL,
@sortDirection VARCHAR(50) = 0,
@pageSize INT = NULL,
@page INT = NULL,
@TotalRows INT = NULL OUTPUT,
@time_zone_offset INT = 0,
@vendor_id VARCHAR(MAX) = NULL,
@status VARCHAR(20) = 'All',
@invoice_id INT = NULL,
@invoice_from_dt DATETIME2 = NULL,
@invoice_to_dt DATETIME2 = NULL)
AS
BEGIN
SELECT
I.invoice_id, I.invoice_amount, I.[status],
v.vendor_id, I.po_id, v.vendor_name,
I.netsuit_invoice_id, cd.currency_symbol
FROM
invoice_details I
LEFT JOIN
vendor_details v ON v.vendor_id = I.vendor_id
LEFT JOIN
currency_details cd ON cd.currency_id = I.currency_id
WHERE
(@po_id IS NULL OR I.po_id = @po_id)
AND (@vendor_id IS NULL OR I.vendor_id = @vendor_id)
AND (@invoice_id IS NULL OR @invoice_id = '' OR I.invoice_id = @invoice_id)
AND (I.invoice_date BETWEEN @invoice_from_dt AND @invoice_to_dt)
AND I.[status] = @status
END
How to filter all the status records?
Advertisement
Answer
You can express this with boolean logic.
Just change:
and I.[status] = @status
To:
and (@status = 'All' or I.[status] = @status)