现需由系统产生一种唯一标识记录的ID字段,希望各位高手提供下...位数不限,但不能出现重复的概率...

解决方案 »

  1.   

    自定义啊 
    use test
    go
    if exists(select * from sysobjects where name='P_Order' and type='P' )
    drop proc P_order
    go
    create proc P_Order
    @MaxId int,
    @Date varchar(10),
    @NewId varchar(20)
    as
    begin
    select @MaxId=Id from TB_Order
    select @Date=CONVERT(VARCHAR(10),GETDATE(),112) 
    set @NewId=@Date+ right(cast(power(10,4) as varchar)+@MaxId,4)
    insert into dbo.test([Name],EName,[NewId]) values('lee','lfs',@NewId)
    endexec P_Order 
      

  2.   

    guid
    根据最大值,时间,random生成
      

  3.   


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    <script type="text/javascript">
    function UUID(){
        this.id = this.createUUID();
    }UUID.prototype.valueOf = function(){ return this.id; }
    UUID.prototype.toString = function(){ return this.id; }UUID.prototype.createUUID = function(){
      
        var dg = new Date(1582, 10, 15, 0, 0, 0, 0);
        var dc = new Date();
        var t = dc.getTime() - dg.getTime();
        var tl = UUID.getIntegerBits(t,0,31);
        var tm = UUID.getIntegerBits(t,32,47);
        var thv = UUID.getIntegerBits(t,48,59) + '1'; // version 1, security version is 2
        var csar = UUID.getIntegerBits(UUID.rand(4095),0,7);
        var csl = UUID.getIntegerBits(UUID.rand(4095),0,7);    var n = UUID.getIntegerBits(UUID.rand(8191),0,7) + 
                UUID.getIntegerBits(UUID.rand(8191),8,15) + 
                UUID.getIntegerBits(UUID.rand(8191),0,7) + 
                UUID.getIntegerBits(UUID.rand(8191),8,15) + 
                UUID.getIntegerBits(UUID.rand(8191),0,15); // this last number is two octets long
        return tl + tm  + thv  + csar + csl + n; 
    }UUID.getIntegerBits = function(val,start,end){
        var base16 = UUID.returnBase(val,16);
        var quadArray = new Array();
        var quadString = '';
        var i = 0;
        for(i=0;i<base16.length;i++){
            quadArray.push(base16.substring(i,i+1));    
        }
        for(i=Math.floor(start/4);i<=Math.floor(end/4);i++){
            if(!quadArray[i] || quadArray[i] == '') quadString += '0';
            else quadString += quadArray[i];
        }
        return quadString;
    }UUID.returnBase = function(number, base){
        return (number).toString(base).toUpperCase();
    }UUID.rand = function(max){
        return Math.floor(Math.random() * (max + 1));
    }function newUID(){
    document.getElementById("txtUID").value = new UUID();
    }
    </script>
    </HEAD><BODY>
    <input type="text" id="txtUID" style="width:300px" value=""/>
    <br/>
    <input type="button" id="btnUID" value="Create UID" onclick="newUID();"/></BODY>
    </HTML>
      

  4.   

    上面是一个JS版的UID生成页面,
    你可以参照它的算法
      

  5.   

    http://www.cnblogs.com/repository/archive/2011/01/17/1937265.html
      

  6.   


    // This code example demonstrates the Guid.NewGuid() method.using System;class Sample 
    {
        public static void Main() 
        {
        Guid g;
    // Create and display the value of two GUIDs.
        g = Guid.NewGuid();
        Console.WriteLine(g);
        Console.WriteLine(Guid.NewGuid());
        }
    }/*
    This code example produces the following results:0f8fad5b-d9cb-469f-a165-70867728950e
    7c9e6679-7425-40de-944b-e07fc1f90ae7*/
      

  7.   

    呵呵,楼主不限位数那自然选择GUID喽,省时省力。不过要是仅限数字的话,可以这样做(提前说一声,这样的重复几率会变大,但作为生成同一天的文件名是够了,vs2008发布后生成的随机文件名就是用的路径hashcode在转成16进制字符串的,所以小范围唯一性还是可以的)。(Guid.NewGuid().GetHashCode() + 3147483648u).ToString();
      

  8.   


    加上3147483648u 也没什么特别用途,就是是为了让最终生成的数字不会是负数(+2147483648u其实就行),但+3147483648u 是保证其是10位数字。要不然会出现0000012345之类的数字,怕导存入数据库或excel中时丢失前面的0。(以前生成一批卡号时就曾经郁闷过,呵呵~)
      

  9.   

    guid是最好的方法。
    要不简单点,来个自增。