变量的默认输入

时间:2014-09-15 21:35:50

标签: tsql sql-server-2005

我试图用一些变量输入调用一个表值函数。但是,如果调用脚本没有设置输入值,我想使用函数default值。

所以,假设我有这个功能(是的,这是一个愚蠢的功能)

create function dbo.testing(@countTo int=10)
returns @output table(num int)
as
 begin
    declare @i int
    set @i=0
    while @i < @countTo
     begin
        set @i=@i+1

        insert into @output(num)
        values(@i)
     end

    return
 end

然后,我可以为输入设置一个变量:

declare @stop int
set @stop=15

select * from dbo.testing(@stop)

但是,如果将@stop保留为null,我希望使用default值,但它只会使用null(不返回任何内容) ...)。基本上,我希望以下工作:

select * from dbo.testing(isnull(@stop,default))

但它只是返回错误:

  

消息156,级别15,状态1,行4关键字附近的语法不正确   &#39;默认&#39;

无论如何都可以在不修改功能的情况下执行此操作吗?

1 个答案:

答案 0 :(得分:2)

在对此进行研究之后,我的结论(我可能错了)是你不能在没有修改下面描述的函数的情况下执行此操作,或者在调用函数时包含条件空值检查:

if @stop is null
select * from dbo.testing(default)
else
select * from dbo.testing(@stop)

但这可能不实用。另一种方法是修改函数以包含空检查和默认值:

create function dbo.testing(@countTo int)
returns @output table(num int)
as
 begin
    if @countTo is null set @countto = 10
    declare @i int
    set @i=0
    while @i < @countTo
     begin
        set @i=@i+1

        insert into @output(num)
        values(@i)
     end

    return
 end

并将其称为select * from dbo.testing(isnull(@stop,null))