create  function p
returns varchar(11)
as
begin
    declare @str varchar(50)
    set @str=''    label:
    begin
        while (len(@str)<=8)
        begin
            select @str=@str+[rand]
              from dbo.[rand]
        end        set @str=left(@str,8)
        
        if exists(select * from dbo.[tel number] with(xlock,paglock) where [tel]=@str)
            goto label        return @str
    end
end
报错:服务器: 消息 170,级别 15,状态 1,过程 p,行 2
第 2 行: 'returns' 附近有语法错误。
服务器: 消息 178,级别 15,状态 1,过程 p,行 22
在此上下文中不能使用带有返回值的 RETURN 语句。请问高手 这是为什么?如何修改?

解决方案 »

  1.   

    create  function p(
    @str varchar(50)
    )
    returns varchar(11)
    as
    begin
        set @str=''    label:
        begin
            while (len(@str)<=8)
            begin
                select @str=@str+[rand]
                  from dbo.[rand]
            end        set @str=left(@str,8)
            
            if exists(select * from dbo.[tel number] with(xlock,paglock) where [tel]=@str)
                goto label       
        end
         return @str
    end不知道用途,只改语法。
      

  2.   

    ALTER  view dbo.[rand]
    as
    select [rand]=stuff(rand(),1,2,'')
    作用是:连上这个视图,求无重复任意号码