• 如何实现自编号


    if object_id('T'is not null
        
    drop table T
    go
    create table T(id varchar(10primary key ,name varchar(10))

    go
    --用触发器完成
    create trigger tr_T_insert on T
    instead 
    of insert
    as
    begin
          
    declare @i int
        
    select * into # from inserted
        
    select @i=isnull(max(id),1000000from T
        
    update # set id=right(1000000+@i,6),@i=@i+1
        
    insert T  select * from #
    end



    go
    --测试
    insert T 
    select 1,'a'union all--这里1为任何值都不影响id插入的值
    select 1,'b'

    select * from T

    /*
    id         name       
    ---------- ---------- 
    000001     a
    000002     b

    (所影响的行数为 2 行)

    */



    go

    if object_id('T'is not null
        
    drop table T
    go
    create table T(id  char(6),name nvarchar(10))
    go
    --定义一个函数
    if object_id('test_fun'is not null
        
    drop function test_fun
    go
    create function test_fun()
    returns char(6)
    as
        
    begin
            
    declare @Max char(6)
            
    select @Max=right('000000'+rtrim((isnull(max(ID),0)+1)),6from T
            
    return @Max
        
    end
    go

    alter table T add constraint UQ_T_default default dbo.test_fun() for ID

    go

    insert T(Name) values('AA')
    insert T(Name) values('BB')

    --
    insert T values(dbo.test_fun(),'CC')
    go
    select * from T
    go
    /*
    id     name       
    ------ ---------- 
    000001 AA
    000002 BB
    000003 CC

    (所影响的行数为 3 行)


    */

    drop table T
    drop function test_fun
    go

    <!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 10]>

    --用數據庫觸發器(處理自增列斷號)

     

    if object_id('T') is not null

        drop table T

    go

    create table T(id  INT IDENTITY,name nvarchar(10))

     

    go

     

     

    CREATE  TRIGGER Tr_dT ON T

    INSTEAD OF DELETE

    AS

    SET NOCOUNT ON ;

    BEGIN

     

     

        DECLARE @MinID INT

        SELECT @MinID=MIN(ID)-1 FROM DELETED

        DELETE T WHERE ID IN(SELECT ID FROM deleted)   

       

        SELECT ID=ID*1,NAME INTO # FROM T   WHERE ID>@MinID

        DELETE T WHERE ID>@MinID

        UPDATE # SET ID=@MinID,@MinID=@MinID+1

        SET IDENTITY_INSERT TON ;

        INSERT INTO T(ID,Name)SELECT ID,Name FROM #

        SET IDENTITY_INSERT TOFF;

        DBCC CHECKIDENT('T',RESEED,@MinID)

        DROP TABLE #

       

    END

    go

    --新增數據

    insert T(Name) values('AA')

    insert T(Name) values('BB')

    insert T(Name) values('CC')

    insert T(Name) values('DD')

    insert T(Name) values('EE')

    GO

    SELECT * FROMT

    /*

    id  name

    1       AA

    2       BB

    3       CC

    4       DD

    5       EE

    */

     

    go

    --測刪除

    DELETE T WHERE ID IN(2,3)

    go

    insert T(Name) values('FF')

     

    SELECT * FROMT

    /*

    id  name

    1   AA

    2   DD

    3   EE

    4   FF

    */

    go

    drop table T

     


  • 相关阅读:
    nginx公网IP无法访问浏览器
    Internet接入方式
    Adobe Photoshop Lightroom 5.3和序列号
    getopt
    printf
    scanf
    cycling -avoid the vicious cycle
    ACE handle_timeout 事件重入
    Linux查看程序端口占用
    The GNU C Library
  • 原文地址:https://www.cnblogs.com/Roy_88/p/5463119.html
Copyright © 2020-2023  润新知