2

我有一个大的 t-sql 存储过程,这部分我担心:

insert into @list
(
params
...
) 
select params
,..
,oip.someAttr
from @list2 as O
join dbo.abc oip
on oip.id = O.id
AND oip.prgId <> 4
join .. someother tables
...
where oipr.attrA = 1232

现在我想编写一个逻辑,如果设置了存储过程“@value 位”中的附加参数,则只应检查“上面的 AND 条件”,否则不检查。

所以如果我喜欢

join dbo.abc oip
on oip.id = O.id
[AND]??? (i donot know).

提前致谢 :)

4

2 回答 2

5

这应该这样做: AND (oip.prgId <> 4 OR @value = 0)

于 2012-07-03T16:25:22.113 回答
0

假设oip.prgId不可能持有0s,这里有另一种考虑/尝试的选择:

AND oip.prgId <> 4 * @value

如果@value为 1,则不等式右侧的计算结果为4,因此相应的行将被过滤掉。然而,如果@value0,那么表达式就等同于oip.prgId <> 0,这基本上意味着的任何值oip.prgId(因为我们假设列中不能有0值)。

于 2012-07-03T18:57:22.397 回答