存储过程中的 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)