我试图用一些变量输入调用一个表值函数。但是,如果调用脚本没有设置输入值,我想使用函数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;
无论如何都可以在不修改功能的情况下执行此操作吗?
答案 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))