【发布时间】:2020-12-08 17:13:00
【问题描述】:
我正在尝试创建一个过程,它需要通过多个标量参数过滤具有 where 条件的记录。我正面临I.[status] 专栏的问题。
在该列中,值将是“待定”、“拒绝”、“已提交”。但是当值带有“All”时,我需要选择所有状态类型(待定、拒绝、提交)
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
如何过滤所有状态记录?
【问题讨论】:
-
NULL 是您的日期参数的默认值吗?然而,使用这些默认值将产生一个空的结果集。供应商 ID 参数是 varchar(max)?而且您还没有开始处理明显的分页逻辑。重新开始 - 在互联网上搜索有关动态搜索条件的建议 - 从 Erland's discussion 开始。然后搜索解决分页问题的技术。
标签: sql sql-server string stored-procedures where-clause