zoukankan      html  css  js  c++  java
  • 关于数据库字段重复时,名称自动加1的问题

    之前项目(类似网盘类的系统)中遇到的一个问题,每次创建一个新文件夹时在新文件夹(+1递增),我的解决方案是在数据库表中加触发器,这能减少代码的开发量,不用书写代码逻辑

    触发器如下:

    CREATE trigger [dbo].[tr_folder_after]
    on [dbo].[storage_FolderUser]
        after insert
    as
    --@count:同名文件夹的个数,@newname新文件夹的名称
    declare @count int,@newname nvarchar(20),@id int,@parentid int,@name nvarchar(20),@creator int;
    select @id=id,@parentid=FolderID,@name=Name,@creator=Creator from Inserted;
    select @count=count(ID) from [dbo].[storage_FolderUser] where Creator=@creator AND FolderID=@parentid AND Name=@name
    if @count>1
    begin
        set @newname=@name;
        set @count=0;
        while @count>=0
        begin
            if exists(select * from [dbo].[storage_FolderUser] where Creator=@creator AND FolderID=@parentid AND Name=@newname)
            begin
                set @count=@count+1;
                set @newname=@name+'('+convert(varchar, @count)+')';
            end
            else
            begin
                set @count=-1;
            end
        end
        UPDATE [dbo].[storage_FolderUser] SET Name=@newname WHERE ID=@id;
    end

    结果如下:

    将 新建文件夹(1) delete 后,再次执行插入数据后将依然按增长顺序补上

    delete from [dbo].[storage_FolderUser] where id=2
    insert into [dbo].[storage_FolderUser](FolderID,Name,Creator,Created)values(0,'新建文件夹',626,getdate())

  • 相关阅读:
    4270. 【NOIP2015模拟10.27】魔道研究
    4269. 【NOIP2015模拟10.27】挑竹签
    NOIP2015模拟10.28B组
    JZOI5257. 小X的佛光
    4260. 最大子矩阵 (Standard IO)
    1010. 【CQOI2009】叶子的颜色
    【NOIP2015模拟10.22】最小代价
    JZOI 距离 (Standard IO) 题解
    统计和 luogu P2068 树状数组和线段树练手
    2020.7.15模拟赛
  • 原文地址:https://www.cnblogs.com/lnice/p/7008149.html
Copyright © 2011-2022 走看看