存储过程中的 Where 子句过滤器
Where clause filter in stored procedure
我正在尝试创建一个过程,它需要通过多个标量参数过滤具有 where 条件的记录。我正面临 I.[status]
.
列的问题
在该列中,值将显示为“待处理”、“已拒绝”、“已提交”。但是当值带有“All”时,我需要select所有状态类型(pending,rejected,submitted)
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
如何过滤所有状态记录?
你可以用布尔逻辑表达。
只需更改:
and I.[status] = @status
收件人:
and (@status = 'All' or I.[status] = @status)
我正在尝试创建一个过程,它需要通过多个标量参数过滤具有 where 条件的记录。我正面临 I.[status]
.
在该列中,值将显示为“待处理”、“已拒绝”、“已提交”。但是当值带有“All”时,我需要select所有状态类型(pending,rejected,submitted)
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
如何过滤所有状态记录?
你可以用布尔逻辑表达。
只需更改:
and I.[status] = @status
收件人:
and (@status = 'All' or I.[status] = @status)