select cast(newid() as varchar(36))

解决方案 »

  1.   

    newid()中本来就包含字符嘛,你这个非数字是什么意思? 将所有的字符替换掉?
      

  2.   

    你刚才为我回复的贴子
    后面4位都是0 这个能不能解决得随机点 不要全部都是0
    是不是rand()函数得小数位不够????
    <<用存储过程 生成长度为21位的数字 并且插入到数据库 100分裸体跪求 在线等待!>>
      

  3.   

    --如果你要转换成纯数字的话,得专门写个函数的处理--创建一个视图,得到newid(),因为函数中不支持newid()
    create view v_newid as select newid=cast(newid() as varchar(36))
    go--处理函数
    create function f_convert()
    returns decimal(38,0)
    as
    begin
    declare @id varchar(36),@i int
    select @id=newid,@i=patindex('%[^0-9]%',@id) from v_newid
    while @i>0
    select @id=stuff(@id,@i,1,'')
    ,@i=patindex('%[^0-9]%',@id)
    return(@id)
    end
    go--调用示例
    select dbo.f_convert()
      

  4.   

    --将刚才那个随机函数改这个吧,这样够随机啦.if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_rand]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_rand]
    GO
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_rand]') and OBJECTPROPERTY(id, N'IsView') = 1)
    drop view [dbo].[v_rand]
    GO--需要这样一个视图
    create view v_rand as select re=rand()
    go--自定义函数:取得指定上下限的随机数
    create function f_rand(
    @下限 decimal(38,0),
    @上限 decimal(38,0)
    )
    returns decimal(38,0)
    as
    begin
    declare @r decimal(38,0)
    select @r=cast(re*899999+100000 as decimal(38,0))*100000000000000000000
     +cast(re*899999+100000 as decimal(38,0))*1000000000000000
     +cast(re*899999+100000 as decimal(38,0))*10000000000
     +cast(re*8999+1000 as decimal(38,0))*100000
     +cast(re*899+10000 as decimal(38,0))
    from v_rand
    return(@r)
    end
    goselect dbo.f_rand(10000000000000000000,999999999999999999999)