我有一个存储过程,我需要在表中搜索所有结果(大多数时间),但有时我知道我正在寻找哪个结果集。
所以我在where子句中需要一个可选参数。如果参数包含在命令行中,则它将被设置,否则默认为0,并且我将整个范围设置为返回。
这很有效,但必须有一个更优雅的解决方案。
CREATE PROCEDURE [dbo].[GetItemDetails]
@itemId int = 0
AS
BEGIN
select * from myEntities
where @itemId > (case when @itemId = 0 then @minId else @itemId - 1 end)
and @itemId < (case when @itemId = 0 then @maxId else @itemId + 1 end)
END
答案 0 :(得分:0)
这样的事情?不知道多少优雅&#39;它是。
select * from myEntities
where ((@ItemId = 0)OR(@ItemId <> 0 AND ItemId = @ItemId))
答案 1 :(得分:0)
这个更清洁:
select * from myEntities
where @itemId = 0 OR (itemId > @minId AND itemID < @maxId)