我现在想做一个函数,比如:我想求n个数的和,n是一个不固定的数,这个函数就得写成sum(n1,n2,n3,…………)
怎么写这个函数

解决方案 »

  1.   

    SQL 2000的函数功能是个半成品,所以你的问题很难有令你满意的答案本来可以用可选参数的,存储过程的就还可以接受
    create pr_test
    @pa1 int,
    @pa2 int=0,
    @pa3 int=0
    as
    ...
    go你可以如下调用
    exec pr_test 1,2,3
    exec pr_test 1,2
    exec pr_test 1函数同样有可选参数
    create function fn_test (
    @pa1 int,
    @pa2 int=0,
    @pa3 int=0
    )
    returns int
    as
    ...go但是不能如下调用
    select dbo.fn_test(1,2)
    select dbo.fn_test(1)
    只能:
    select dbo.fn_test(1,2,3)
    select dbo.fn_test(1,2,default)
    select dbo.fn_test(1,default,default)
    写default感觉好难受
      

  2.   

    写个表值函数,然后求和即可
    CREATE   function dbo.pqs_split(@SourceStr varchar(8000),@SeprateStr varchar(10))
    returns @table table(col varchar(100))
    as 
    begin declare @table_tmp table(ident int identity(1,1),tempvalue char(1))
    insert into @table_tmp(tempvalue) select    top 1000 '' from syscolumns a,syscolumns b
    if @SeprateStr=' '  
    begin
    select @SourceStr=Replace(@SourceStr,@SeprateStr,'|' ),@SeprateStr='|'
    end
    insert into @table
    select substring(@SourceStr,pqs.ident,charindex(@SeprateStr,@SourceStr+@SeprateStr,pqs.ident)-pqs.ident)  --into #t
    from @table_tmp pqs
    where substring(@SeprateStr+@SourceStr,pqs.ident,1)=@SeprateStr return 
    end
    -------------------------------
    select sum(cast(col as int)) from pqs_split('1,2,3,4,45,645,7567',',') 即可
    -------------------------------
    结果:
    ----------- 
    8267(所影响的行数为 1 行)
      

  3.   

    要改造成你需要的sum(1,2,3,4....)什么的这样纯粹的函数就如楼上说是比较困难的
    只有把所有参数当做一个字符串传递过来来处理
      

  4.   

    '1,2,3,4,45,645,7567'
    在函数里 while 边截边加~~
      

  5.   

    如楼上所上所说
    传一个字符串进来
    set @i=1
    while @i<=len(@str)
    begin
      set @tempStr=substring(@i,1)
      set @sum=@sum+cast(@tempStr as int)
      set @i=@i+1
    end
      

  6.   

    我也遇见过这样的问题,我是这样解决的,这里不给出代码了,
    方法:
    1.拼接字符串,每个参数中间用一个比较特殊的字符拼接,比如“,”
    这样你在function里面用字符串方法找到","的位置,然后一一取出来。这样的方法,你就只要传一个参数就可以了.2. 如果参数类型各不同,那么就在传进来之前,做convert.toString(...)然后拼接进来
      

  7.   

    declare @s varchar(100)
    declare @s1 varchar(100)
    declare @i smallint
    declare @len smallint
    declare @sum smallint
    set @sum=0
    set @s1=''
    set @s='12,32,52,72,19,'
    set @len=len(@s)
    set @i=0
    while @i<=@len
    begin
    if(substring(@s,@i,1)=',') 
    begin
    set @sum=@sum+cast(@s1 as int)
    set @s1=''
    end
    else
    begin
    set @s1=@s1+substring(@s,@i,1)
    end
    set @i=@i+1
    end
    print cast(@sum as int)-------
    187你把這段語句放入函數中,其中,@s為輸入參數