使用IF / ELSE调整WHERE

时间:2014-12-01 07:44:24

标签: sql-server tsql stored-procedures where

我正试图运行这个sp但是......我无法弄清楚错误在哪里。你能帮助我吗?

alter procedure prova @condizione=1, @parametro=39
    @condizione1 int,
    @parametro int
as

begin
declare @condizione int
set @condizione = @condizione1


    SET NOCOUNT ON
select  pf.CostumerCode, pf.BelongTo
from    tbprodfin pf
    where 
    CASE @condizione
        WHEN 1 THEN pf.IdPF
        WHEN 2 THEN pf.BelongTo
    END  = @parametro

end

3 个答案:

答案 0 :(得分:0)

鉴于提供的信息很少:我想把你的select子句改为某事。像

select  pf.CostumerCode, pf.BelongTo
from    tbprodfin pf
where 1 = 1
    and (   (@condizione = 1 and @parametro = pf.IdPF)
        or  (@condizione = 2 and @parametro = pf.BelongTo))

这可能最初不起作用,但它应该让你开始,因为我希望。另请参阅此related question

答案 1 :(得分:0)

尝试就好了

  CREATE procedure prova @condizione int =1,
 @parametro int =39,
    @condizione1 int    --what for??
as
begin
SET NOCOUNT ON
if @condizione=1
begin
select  pf.CostumerCode, pf.BelongTo
from    tbprodfin pf
where pf.IdPF= @parametro
end 
else 
begin
if @condizione=2
begin
select  pf.CostumerCode, pf.BelongTo
from    tbprodfin pf
where pf.BelongTo= @parametro
end  
end
end

答案 2 :(得分:0)

如果我明白你想要什么。有结果使用CASE ...

select  pf.CostumerCode, pf.BelongTo
from    tbprodfin pf
    where 
    (CASE WHEN @condizione = 1 THEN pf.IdPF
          WHEN @condizione = 2 THEN pf.BelongTo END) = @parametro