2014-09-15 4 views
0

Я пытаюсь вызвать функцию с таблицей с некоторыми переменными входами. Однако я хотел бы использовать значение функции 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 @[email protected]+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 Incorrect syntax near the keyword 'default'.

есть в любом случае сделать это без изменения функции?

ответ

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 @[email protected]+1 

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

    return 
end 

И называют это как select * from dbo.testing(isnull(@stop,null))

Смежные вопросы