【问题标题】:Default Input from variable来自变量的默认输入
【发布时间】:2014-11-09 12:34:55
【问题描述】:

我正在尝试使用一些变量输入调用表值函数。但是,如果调用脚本没有设置输入值,我想使用函数的 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))

但它只是返回错误:

Msg 156, Level 15, State 1, Line 4 关键字附近的语法错误 '默认'。

有没有办法在不修改函数的情况下做到这一点?

【问题讨论】:

    标签: tsql sql-server-2005


    【解决方案1】:

    在对此进行了一些研究后,我的结论(尽管我可能是错的)是,如果不修改如下所述的函数或在调用函数时包含条件空检查,则无法执行此操作:

    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))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 2013-05-12
      相关资源
      最近更新 更多