Sql 按id获取行,如果id为0,则获取所有行

Sql 按id获取行,如果id为0,则获取所有行,sql,sql-server,Sql,Sql Server,我有一个存储过程,用于获取具有特定ID的表中的所有行。如果存储ID为0,我要做的是从该表中获取所有行 这是我现在使用的代码: SELECT store_id, SUM(traffic) FROM traffic WHERE store_id = @store_id AND year = @year GROUP BY store_id 我想更改此查询,使其在@store\u id=0时返回所有行而不考虑store\u id在发出请求之前测试您的store\u id。如果store\u id=

我有一个存储过程,用于获取具有特定ID的表中的所有行。如果存储ID为0,我要做的是从该表中获取所有行

这是我现在使用的代码:

SELECT store_id, SUM(traffic) FROM traffic 
WHERE store_id = @store_id AND year = @year 
GROUP BY store_id

我想更改此查询,使其在@store\u id=0时返回所有行而不考虑store\u id

在发出请求之前测试您的
store\u id
。如果
store\u id==0
,则再次请求获取有关
store\u id的所有信息

请尝试以下操作

SELECT store_id, SUM(traffic) FROM traffic 
WHERE (store_id = @store_id OR @store_id = 0) AND year = @year 
GROUP BY store_id

尝试此操作,如果@store\u id也可能为
NULL
,则执行以下操作

SELECT store_id, SUM(traffic) FROM traffic 
WHERE (store_id = @store_id OR ISNULL(@store_id, 0) = 0)
 AND year = @year 
GROUP BY store_id

那么你的问题是什么呢?当@store\u id为0时,我如何更改查询以返回所有行,而不考虑store\u id。你可以尝试
其中store\u id=@store\u id或@store\u id=0)和year=@year
如果给定参数为0(或/和
NULL
?),我假设你想选择所有记录:您应该在SP中使用
If…Else
,然后。这比使用
或@store\u id=0
效率更高。该查询只比nicky+1快20秒,因为该查询不会返回所有行
其中store\u id=0
,即使将非零的值传递给
@store\u id
变量?不会,因为它说的是
@store\u id
,而不是
store\u id
IF @store_id = 0
BEGIN
SELECT store_id, SUM(traffic) FROM traffic 
WHERE year = @year 
GROUP BY store_id
END
ELSE
BEGIN
SELECT store_id, SUM(traffic) FROM traffic 
WHERE store_id = @store_id AND year = @year 
GROUP BY store_id
END