1

我有下面的 SQL 代码片段,我想通过操纵 @Customer 参数的值来选择所有客户的销售额。在 SQL Server 2008 R2 中有没有办法做到这一点?我试过设置 @Customer = '%' 但显然这不起作用,因为没有 LIKE 运算符。

我只想操纵参数,因为在其他时候我只需要选择一个客户。有没有在 WHERE 子句中使用 IF/ELSE 这样的事情?

DECLARE @Customer varchar(5) = ''

SELECT *
FROM SalesData
WHERE Customer=@Customer
4

3 回答 3

1

如果你默认@CustomerNULL不是''那么你可以

WHERE Customer = ISNULL(@Customer, Customer)
于 2013-11-11T19:54:43.603 回答
1

是否有在 WHERE 子句中使用 IF/ELSE 这样的事情

绝对有一个CASE表达式- 不仅在WHERE子句中,而且在查询的其他部分中。但是,更常见的方法是在WHERE子句中使用逻辑表达式,强制 SQL Server 根据参数设置采用一个条件或另一个条件。

我的条件是if @Customer = '' then select all

如果您想在参数设置为空时选择所有客户,或者选择所有未设置参数的客户,您可以这样做:

SELECT *
FROM SalesData
WHERE @Customer = ''
   OR  Customer = @Customer

如果@Customer设置为'',则表达式的第一个子句ORTRUE针对所有行,因此将返回所有客户。但是,当@Customer为非空时,将计算表达式的第二部分。

于 2013-11-11T17:19:29.720 回答
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)))

于 2013-11-11T17:34:06.997 回答