Select语句中的条件where子句

2 sql conditional

我正在使用存储过程根据SP的参数生成报告.我必须根据传递的参数加入不同的条件.

对于前者

ALTER PROCEDURE [dbo].[sp_Report_InventoryAging] 

@TitleFlag int=0, /*0-All veh, 1-Clear Title, 2-Without Clear Title*/

@CompName varchar(100) = 'ALL COMPANIES',

@CompBranchId varchar(50) = 'ALL',  /*All Offices*/

@StateId varchar(50)='All States'       /*All states*/ 
Run Code Online (Sandbox Code Playgroud)

Select .... Where TitleFlag=@TitleFlag and

现在我想根据参数指定条件,如 -

  1. 如果不是'所有公司'那么上层(公司)=上层(@CompName)
  2. 如果不是'所有办公室',那么OfficeID = @ CompBranchId
  3. 如果不是"所有状态",则StateID = @ StateID

如何根据参数值在select语句的where条件下合并所有这些条件?

任何帮助都非常感谢.

tek*_*ues 13

像这样做:

where
(upper(Company)=upper(@CompName) or @compName = 'ALL COMPANIES')
and 
(OfficeID=@CompBranchId or @CompBranchId = 'ALL OFFICES')
and
(StateID=@StateID or @StateID = 'ALL States')
Run Code Online (Sandbox Code Playgroud)

  • @ Irfan,你认为你还没有理解这个解决方案.:)如果不使用动态SQL,则无法动态更改where子句(不推荐).你可以做的是确保在传递默认字符串时,绕过通常的where子句.这就是"OR"的来源."默认值是传递给OR公司名称匹配." 在解决它之前尝试解决方案. (4认同)