之前客户的需求是将表中的字段rec_id作为主键(INT型`自增),我写了几天的程序....
昨天客户改变主意了,要将rec_id字段类型改为char(15),因为要往字段里写入的信息是15位随机数。
问题来了 1.这种情况下rec_id还适合做主键么?
         2.尝试了下用rec_id做主键,每两秒向数据库写一次信息。因为数据是随机生成的,所以大小是没有规律的(照成没有顺序`乱插得现象)。而且程序还不稳定容易出错。我想要的效果是数据一行一行按顺序写下去,而不是这种大小随机(数据库会根据从小到大的顺序排列`可是这样排列的话我前面的程序许多功能就白做了)`到数据库里乱插的情况。希望高手可以指点一下,万分感激!!!!!

解决方案 »

  1.   


    1
    要将rec_id字段类型改为char(15),因为要往字段里写入的信息是15位随机数。不适合做主键了吧,随机数,你想不想重复啊,如果只做流水号,可以作为主键2
    其实你可弄一个时间列呀,怎么插入,最后排序一下就行了
      

  2.   

    我在表里随便建了一个ID列,INT类型的自增的。之后就可以达到我的目的了,不知道这种方案可行不可行。
      

  3.   

    将rec_id字段类型改为char(15),再建一列 Seq 来标识顺序,给个自增?
    这样行吗?
      

  4.   

    原来的标识列就是rec_id啊,从1开始自增的。 我新建个字段ID 设置成INT型`自增的,然后设置成主键。最后把rec_id的主键去掉。这样做可以么
      

  5.   

    如果用GUID作为随机数,可以用作主键,但是长度就不止15位了。
      

  6.   

    我用了个随机函数 函数如下 //纯数字随机数函数(无零)
            public static string RandCodeNo0(int n, ref string y)
            {            char[] arrChar = new char[] { '1', '2', '3', '4', '5', '6', '7', '8', '9' };            StringBuilder num = new StringBuilder();            Random rnd = new Random(DateTime.Now.Millisecond);            for (int i = 0; i < n; i++)
                {
                    num.Append(arrChar[rnd.Next(0, arrChar.Length)].ToString());
                }
                y = num.ToString();
                return y;
            }
      

  7.   

    你这样的随机数出现重复值的可能性会很高的如何你改一下这个生成随机数据的方法是可以做为主键的,但是如何你想让数据库中有序就得,在前面再加一列,为int类型的自动增长,就行了,而且还没用在程序中添加一个列来接收因为不需要我现在用的随机生成方法,你可以参考一下,希望对你有用
    /// <summary>
            /// 生成对应的编号
            /// </summary>
            /// <returns>生成的编号</returns>
            public string GetId()
            {
                string id = DateTime.Now.ToString("yyyyMMddhhmmss");
                Random rd = new Random();
                id += rd.Next(100, 999);
                return id;
            }
    不过这是17位的
    你改一下就行了,其实主要是要上时间这样重复性就将低了,至少现在我的数据还没有重复的
    你可以试试
      

  8.   

    不重复的随机数可以用SQL中的NEWID()