-- 不试不知道,一试吓一跳!
http://topic.csdn.net/u/20100610/15/c9ded663-13ce-4d49-b69c-551e57a6f6fd.htmldrop table tb;CREATE TABLE tb(
ID INT,
randname VARCHAR(10) default round(RAND()*100000,0)
);-- DELETE FROM TB;
insert into tb(id) values(3);select * from tb;-- 其实你这个不需要用“触发器”来实现,
-- 在这个字段上创建一个随机数的默认值就OK了!

解决方案 »

  1.   

    -- 但是:Oracle的好像不行!
      

  2.   


    drop table tb;CREATE TABLE tb(
    ID INT,
    randname VARCHAR(10) default round(RAND()*100000,0)
    );-- DELETE FROM TB;
    insert into tb(id) 
    select 1 union all select 2 union all select 3select * from tb;
    --RAND()函数的问题在这里
    /*
    ID          randname   
    ----------- ---------- 
    1           18358
    2           18358
    3           18358(所影响的行数为 3 行)
    */
      

  3.   


    drop table tb;CREATE TABLE tb(
    ID INT,
    randname VARCHAR(100) default checksum(newid())
    );-- DELETE FROM TB;
    insert into tb(id) 
    select 1 union all select 2 union all select 3select * from tb;
    --newid()函数就没有问题了
    /*
    ID          randname                                                                                             
    ----------- ---------------------------------------------------------------------------------------------------- 
    1           1810815142
    2           2071327481
    3           1975422698(所影响的行数为 3 行)
    */
      

  4.   


    -- 人家只要求生成数字,也就是说不能有字符,newid()函数会生成字符与数字的混合!
      

  5.   


    -- 嗯,谢谢:记住啦:checksum()
      

  6.   

    --   OK 啦,谢谢!drop table tb;CREATE TABLE tb(
    ID INT,
    randname VARCHAR(6) default substring(convert(varchar(100),abs(checksum(newid()))),1,6)
    );-- DELETE FROM TB;
    insert into tb(id) 
    select 1 union all select 2 union all select 3select * from tb;