select 
    max(t.a) 
from 
    (select @v1 as a 
     union 
     select @v2 
     union 
     select @v3 
     union 
     select @v4) t

解决方案 »

  1.   

    declare @v1 int,@v2 int,@v3 int,@v4 int
    select @v1=1,@v2=3,@v3=9,@v4=2select id,a from 
    (
    select @v1 a,id='v1'
    union select @v2,id='v2'
    union select @v3, id='v3'
    union select @v4, id='v4') x
    where a=
    (select max(a) from
    (
    select @v1 a,id='v1'
    union select @v2,id='v2'
    union select @v3, id='v3'
    union select @v4, id='v4') x)
    /*
    v3 9
    */
    如果只取最大值不取名字
    select max(a) from
    (
    select @v1 a,id='v1'
    union select @v2,id='v2'
    union select @v3, id='v3'
    union select @v4, id='v4') x
      

  2.   

    --try
    create function dbo.f_max(@num1 decimal,@num2 decimal)
    returns decimal
    as
    begin
    return case when @num1<@num2 then @num2 else @num1 end
    end
    godeclare @v1 decimal
    declare @v2 decimal
    declare @v3 decimal
    declare @v4 decimal
    set @v1=89
    set @v2=60
    set @v3=109
    set @v4=9
    select dbo.f_max(@v1,dbo.f_max(@v2,dbo.f_max(@v3,@v4)))
    go
    drop function f_max