Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 来自变量的默认输入_Tsql_Sql Server 2005 - Fatal编程技术网

Tsql 来自变量的默认输入

Tsql 来自变量的默认输入,tsql,sql-server-2005,Tsql,Sql Server 2005,我试图用一些变量输入调用一个表值函数。但是,如果调用脚本没有设置输入值,我希望使用函数的默认值 所以,假设我有这个函数(是的,这是一个愚蠢的函数) 但是,如果@stop保留为null,我想使用默认值,但它只会使用null(不返回任何内容…)。从本质上讲,我希望以下各项能够发挥作用: select * from dbo.testing(isnull(@stop,default)) 但它只是返回错误: 消息156,级别15,状态1,第4行关键字附近语法不正确 “默认” 有没有办法在不修改函数的情况

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

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

但是,如果
@stop
保留为
null
,我想使用
默认值,但它只会使用
null
(不返回任何内容…)。从本质上讲,我希望以下各项能够发挥作用:

select * from dbo.testing(isnull(@stop,default))
但它只是返回错误:

消息156,级别15,状态1,第4行关键字附近语法不正确 “默认”


有没有办法在不修改函数的情况下执行此操作?

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

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
创建函数dbo.testing(@countTo int)
返回@output表(num int)
作为
开始
如果@countTo为空,则设置@countTo=10
声明@i int
设置@i=0
而@i<@倒计时
开始
设置@i=@i+1
插入@output(num)
值(@i)
结束
返回
结束
并将其命名为
select*from dbo.testing(isnull(@stop,null))

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