SQL 服务器中 where 子句列的多个条件
Multiple conditions on a where clause column in SQL Server
我写了一个存储过程,它需要根据参数值执行 where 条件,如下所示:
alter proc sp_cc_get_grn_details
(
@vendor_id varchar(100) = null,
@po_id int = null,
@invoice_id int = null,
@invoice_from_dt datetime2 = null,
@invoice_to_dt datetime2 = null,
@grn_status int = null
)
AS
BEGIN
SELECT vd.vendor_id,vd.vendor_name,id.po_id,id.invoice_id,id.invoice_amount,id.invoice_date,
CASE
WHEN id.grn_status = 0 THEN 'Pending'
WHEN id.grn_status = 1 THEN 'Completed'
ELSE 'Pending'
END AS grn_status into #Tempres
FROM
vendor_details vd JOIN po_details pd on vd.vendor_id = pd.vendor_id
join invoice_details id on id.po_id = pd.po_id
WHERE
(@vendor_id is null or @vendor_id = '' or vd.vendor_id = @vendor_id) AND
(@po_id is null or @po_id = '' or id.po_id = @po_id) AND
(@invoice_id is null or @invoice_id = '' or id.invoice_id = @invoice_id) and
(id.invoice_date BETWEEN @invoice_from_dt AND @invoice_to_dt)
if(@grn_status = 1)
select * from #Tempres where grn_status = 'Completed';
else if(@grn_status = 2)
select * from #Tempres where grn_status = 'Pending';
else
select * from #Tempres;
drop table #Tempres;
END
以上程序有效。但我需要的是,有没有办法在 where 子句中也制作“@grn_status”参数,而不是用 if & else.
像这样的东西会起作用
where @grn_Status not in (1, 2) or
grn_status =
case @grn_status
when 1 then 'Completed'
when 2 then 'Pending'
end
我写了一个存储过程,它需要根据参数值执行 where 条件,如下所示:
alter proc sp_cc_get_grn_details
(
@vendor_id varchar(100) = null,
@po_id int = null,
@invoice_id int = null,
@invoice_from_dt datetime2 = null,
@invoice_to_dt datetime2 = null,
@grn_status int = null
)
AS
BEGIN
SELECT vd.vendor_id,vd.vendor_name,id.po_id,id.invoice_id,id.invoice_amount,id.invoice_date,
CASE
WHEN id.grn_status = 0 THEN 'Pending'
WHEN id.grn_status = 1 THEN 'Completed'
ELSE 'Pending'
END AS grn_status into #Tempres
FROM
vendor_details vd JOIN po_details pd on vd.vendor_id = pd.vendor_id
join invoice_details id on id.po_id = pd.po_id
WHERE
(@vendor_id is null or @vendor_id = '' or vd.vendor_id = @vendor_id) AND
(@po_id is null or @po_id = '' or id.po_id = @po_id) AND
(@invoice_id is null or @invoice_id = '' or id.invoice_id = @invoice_id) and
(id.invoice_date BETWEEN @invoice_from_dt AND @invoice_to_dt)
if(@grn_status = 1)
select * from #Tempres where grn_status = 'Completed';
else if(@grn_status = 2)
select * from #Tempres where grn_status = 'Pending';
else
select * from #Tempres;
drop table #Tempres;
END
以上程序有效。但我需要的是,有没有办法在 where 子句中也制作“@grn_status”参数,而不是用 if & else.
像这样的东西会起作用
where @grn_Status not in (1, 2) or
grn_status =
case @grn_status
when 1 then 'Completed'
when 2 then 'Pending'
end