我想创建一个存储过程。如果参数是-1,那么在该列上不应该有where子句,否则应该有WHERE子句。没有大量IF分支的最好方法是什么?SQL Server 2000存储过程与参数分支
我检查了存档。有几个类似的问题,但不完全相同。
CREATE PROCEDURE report
(
@site int,
@promo int,
@type int
)
AS
SET NOCOUNT ON
-- I want to avoid this:
IF @site = -1 AND @promo = -1 and @type = -1
BEGIN
SELECT * from table
END
IF @site > -1 AND @promo = -1 and @type = -1
BEGIN
SELECT * from table WHERE site = @site;
END
... -- other cases
ELSE -- all parameters are > -1
BEGIN
SELECT * from table
WHERE site = @site AND promo = @promo AND type = @type
END
用于NULLIF/ISNULL技巧的+1,以及用更好的答案更快地绘制。 – meklarian 2009-11-17 19:36:12
我实施了第一个解决方案。耗时4秒。具有相同参数的第二种解决方案花费了2:40分钟。表有三千万行。 – Yada 2009-11-17 20:00:42
@Yada:我有另一个转换!人们认为它不会扩大 – gbn 2009-11-17 20:03:43