/*根据flag的标识值, 用不同的where条件进行查询订单列表*/
CREATE PROCEDURE [dbo].[usp_GetOrderList]
@orderNo nvarchar(20),
@flag int
as
SELECT a.OrderId,a.OrderNo,a.OrderDate,a.CustomerId,b.CustomerName
FROM Orders a
INNER JOIN Customers b on b.CustomerId = a.CustomerId
WHERE ( CASE
WHEN @flag =1 and a.OrderNo like '%' + @orderNo +'%' then 'ok'
WHEN @flag=2 and a.OrderNo like '_' + @orderNo + '%' then 'ok'
) ='ok'
注意: case when 只能返回值,不能返一个true / false
你也可以用exec(@str)的方法来,对@str进行select where可变条件的组合.
如: exec('select a,b,c from table1 where x=z ...')
本文介绍如何在SQL查询中利用Case When语句根据参数动态设置Where条件,以筛选订单列表。示例中展示了根据@flag参数的不同值,结合变量@orderNo匹配不同模式的订单号。
1939

被折叠的 条评论
为什么被折叠?



