create function initnum()
returns int 
as
begin
declare @revalue int
select @revalue=convert(int,rand()*10)
return @revalue
end自定义了一个函数,想要返回一个随机的整数,这样写提示:在函数内不正确地使用了 'rand'如果单独写declare @revalue int
select @revalue=convert(int,rand()*10)
print @revalue就没有问题.不知道是什么原因?

解决方案 »

  1.   

    使用视图辅助..--取得随机数的视图
    CREATE VIEW v_RAND
    AS
    SELECT re=STUFF(RAND(),1,2,'')
    GO--生成随机编号的函数
    CREATE FUNCTION f_RANDBH(@BHLen int)
    RETURNS varchar(50)
    AS
    BEGIN
    DECLARE @r varchar(50)
    IF NOT(ISNULL(@BHLen,0) BETWEEN 1 AND 50)
    SET @BHLen=10lb_bh: --生成随机编号的处理
    SELECT @r=re FROM v_RAND
    WHILE LEN(@r)<@BHLen
    SELECT @r=@r+re FROM v_RAND
    SET @r=LEFT(@r,@BHLen) --检查编号在基础数据表中是否存在
    IF EXISTS(SELECT * FROM tb WITH(XLOCK,PAGLOCK) WHERE BH=@r)
    GOTO lb_bh RETURN(@r)
    END
    GO