求助一个困扰我很久的问题:我写的表函数,例如:create function test 
(@编号 varchar(20))
returns table
as 
return 
(
select * from 表 where 编号=@编号
)我希望在调用时,如果不加参数,则查询的结果为:
select * from 表请问如何才能办到?(要求:不使用宏替换即不要使用拼字符的方式,因为我的代码非常长,使用宏替换会很麻烦)

解决方案 »

  1.   

    create function test  
    (@编号 varchar(20)) 
    returns table
    as  
    return  
    (
    select * from 表 where 编号=isnull(@编号,编号))
      

  2.   

    另外同样是这个问题,如果传入的参数是''
    也希望当做是null值同样的处理,应该如何写?
    也就是说:可能传null,也可能传''
      

  3.   

    create function test   
    (@编号 varchar(20))  
    returns table
    as   
    return   
    (
    select * from 表 where 编号=case when isnull(@编号,'')='' then 编号 ELSE @编号 END
    )
      

  4.   

    要达到我的这种需求,请问除了我的这种方法create function test  
    (@编号 varchar(20)) 
    returns table
    as  
    return  
    还有其他的更好的写法吗?请指教,谢谢
      

  5.   

    是要在你返回表结构固定,如果不固定用不了create function test  
    (@编号 varchar(20)) 
    returns @T table(COL INT,COL2 INT)
    as  BEGIN
    IF ISNULL(@编号,'')=''INSERT @T 
    select COL ,COL2 from 表 --where 编号=@编号
    ELSE
    INSERT @T 
    select COL ,COL2 from 表 where 编号=@编号RETURN @T
    END
      

  6.   

    明白,这种写法我会。
    由于我的代码其实不只是这么简单的一句 select 而是一句上百行的代码,这样写以后,整个代码会长一倍,将会很不好维护。