我有以下SQL代码片段,我想通过操纵@Customer参数的值来选择所有客户的销售。有没有办法在SQL Server 2008 R2中执行此操作?我已经尝试设置@Customer ='%'但显然由于没有LIKE运算符而无效。
我只想操纵参数,因为在其他时候我会这样做 需要只选择一个客户。是否有在WHERE子句中使用IF / ELSE的东西?
DECLARE @Customer varchar(5) = ''
SELECT *
FROM SalesData
WHERE Customer=@Customer
答案 0 :(得分:1)
是否存在在WHERE子句中使用IF / ELSE
的事情
当然,there is a CASE
expression - 不仅在WHERE
子句中,而且在查询的其他部分中。但是,更常见的方法是在WHERE
子句中使用逻辑表达式,强制SQL Server根据参数设置采用一种条件。
我的情况是
if @Customer = '' then select all
如果您希望在参数设置为空时选择所有客户,或者选择未设置参数的所有客户,则可以执行以下操作:
SELECT *
FROM SalesData
WHERE @Customer = ''
OR Customer = @Customer
如果@Customer
设置为''
,则所有行的OR
表达式的第一个子句将为TRUE
,因此将返回所有客户。但是,当@Customer
非空时,表达式的第二部分将被评估。
答案 1 :(得分:1)
不太确定您需要如何执行搜索
但可以尝试下面的内容
SELECT *
FROM SalesData
WHERE Customer like '%' + @Customer + '%'
或
SELECT *
FROM SalesData
WHERE (LEN(@Customer)>0 AND Customer =@Customer)
OR (LEN(@Customer)=0)
在这里我没有trim
假设你总是通过''
。但您始终可以使用LEN(LTRIM(RTRIM(@Customer)))
答案 2 :(得分:1)
如果您将@Customer
默认为NULL
而不是''
,那么您可以
WHERE Customer = ISNULL(@Customer, Customer)