自定义函数不能嵌套使用吗?不会啊,是可以嵌套的.select * from b(a(getdate()),'char')
出错,可能是getdate()这系统函数的问题吧.

解决方案 »

  1.   

    TRYselect * from b(a('2004-7-3'),'char')
      

  2.   

    那个getDate()没有问题
    我这样使用都可以 
    print a(getdate())单独的select * from b('char1','char2')也能用。就是把他们放到一起就不行了。
      

  3.   

    发现问题了.CREATE FUnction a (@ia datetime)
    returns varchar(100)
    as 
    begin
    declare @a varchar(100)
    set @a='100'
    return @a
    endcreate function b (@a varchar(100))
    returns varchar(100)
    as
    begin
    return @a
    endselect dbo.b(dbo.a(getdate()))
    --------------------------------------------
    你的应该改成.
    select * from dbo.b(dbo.a(getdate()),'char')
      

  4.   

    我是加了dbo的,报错说 "."附近有错误。
    你试了的行吗?
      

  5.   

    CREATE FUnction a (@ia datetime)
    returns varchar(100)
    as 
    begin
    declare @a varchar(100)
    set @a='100'
    return @a
    endcreate function b (@a varchar(100))
    returns varchar(100)
    as
    begin
    return @a
    endselect dbo.b(dbo.a(getdate()))
    /*------------------
    100
    */drop function a,b
      

  6.   

    谢谢你,我把你的试了,开始报错,后来在每个end 后面加上了go,声明时也要加上dbo.a
    就可以使用,但是我的就是报“ '.' 附近有语法错误。”
    不知道是怎么回事。
      

  7.   

    注意你function放在哪个数据库中如果是放在pub中的话应该这样写select * from pub.dbo.b(pub.dbo.a(getdate()),'char')或者你把函数放在master库也行
      

  8.   

    同意楼上也可以
    use
    pubsselect * from dbo.b(dbo.a(getdate()),'char')
      

  9.   

    你看看,我就是用了邹大哥的一个分割字符串的方法 
    CREATE FUNCTION dbo.a
    (@ProductDate datetime)
    RETURNS varchar(800) AS  
    BEGIN 
    declare @char varchar(800)
    set @char =  @ProductDate
    return @char
    end
    goCREATE FUNCTION dbo.b(
    @str varchar(1600) --要分拆的字符串
    ,@spli varchar(10) --字符串分隔符
    )
    returns @re table(istr varchar(20))
    as
    begin
    declare @i int,@splen int
    select @splen=len(@spli)
    ,@i=charindex(@spli,@str)
    while @i>0
    begin
    insert into @re values(left(@str,@i-1))
    select @str=substring(@str,@i+@splen,1600)
    ,@i=charindex(@spli,@str)
    end
    if @str<>'' insert into @re values(@str)
    return
    end
    goprint dbo.a(getdate())
    select * from dbo.b(dbo.a(getdate()),' ')
    drop function dbo.a,dbo.b
      

  10.   

    我把自己的也改了一下.CREATE FUnction a (@ia datetime)
    returns varchar(100)
    as 
    begin
    declare @a varchar(100)
    set @a='100'
    return @a
    end
    gocreate function b (@a varchar(100))
    returns @re table(a varchar(100))
    as
    begin
    insert @re 
    select @a
    return 
    end
    goselect * from dbo.b(dbo.a(getdate())-----------不行.
      

  11.   

    我也发现了
    可能是在select 语句中,不能这样使用吧
      

  12.   

    TRY;用一变量来接收函数A的返回值.
    CREATE FUnction a (@ia datetime)
    returns varchar(100)
    as 
    begin
    declare @a varchar(100)
    set @a='100'
    return @a
    end
    gocreate function b (@a varchar(100))
    returns @re table(a varchar(100))
    as
    begin
    insert @re 
    select @a
    return 
    end
    go
    declare @a varchar(100)
    set @a =dbo.a(getdate())
    select * from dbo.b(@a)drop function a,b