关于数据库字段重复时,名称自动加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())

时间: 2024-10-22 14:48:24

关于数据库字段重复时,名称自动加1的问题的相关文章

WP8_当滚动到滚动条的70%时,自动加载数据效果实现

Touch.FrameReported += Touch_FrameReported;   void Touch_FrameReported(object sender, TouchFrameEventArgs e) { // 传入null表明获取到的触控点信息是以屏幕左上角为原点的. var primaryPoint = e.GetPrimaryTouchPoint(null);   if (primaryPoint != null && primaryPoint.Action == T

go语言使用go-sciter创建桌面应用(八) 窗口显示时,自动加载后端数据。

有些时候我们需要在窗口创建并显示时,加载一些后端的配置,这就需要用到view提供的几个事件. https://sciter.com/docs/content/sciter/View.htm statechange 状态改变时,最大化,最小化,显示,隐藏,会触发事件回调. activate 窗口激活或停用时,可以理解为获取焦点或失去焦点,触发事件回调. demo.go的代码如下: package main import ( "fmt" "log" "path

如何在tomcat启动时自动加载一个类

有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以采用在WEB-INF/web.xml中添加一个监听程序(ServletContextListener配置项),步骤如下:1) 增加一个监听程序 MyServletContextListener.java, 实现javax.servlet.ServletContextListener接口 packag

tomcat启动时自动加载一个类 MyServletContextListener

目的: 我们知道在tomcat启动后,需要页面请求进行驱动来执行操作接而响应.我们希望在tomcat启动的时候能够自动运行一个后台线程,以处理我们需要的一些操作.因此需要tomcat启动时就自动加载一个类,或运行一个类的方法. 可以采用ServletContextListener. 方法: (1)编写一个监听类,实现javax.servlet.ServletContextListener接口. 1 import javax.servlet.ServletContextEvent; 2 impor

PHP 命名空间与自动加载机制

include 和 require 是PHP中引入文件的两个基本方法.在小规模开发中直接使用 include 和 require 没哟什么不妥,但在大型项目中会造成大量的 include 和 require 堆积.这样的代码既不优雅,执行效率也很低,而且维护起来也相当困难. 为了解决这个问题,部分框架会给出一个引入文件的配置清单,在对象初始化的时候把需要的文件引入.但这只是让代码变得更简洁了一些,引入的效果仍然是差强人意.PHP5 之后,随着 PHP 面向对象支持的完善,__autoload 函

jquery 下拉自动加载

function Map() //自定义map { this.container = new Object(); } Map.prototype.put = function(key, value) { this.container[key] = value; }; Map.prototype.get = function(key) { return this.container[key]; }; Map.prototype.keySet = function() { var keyset =

jquery scroll 自动加载内容

当拖动滚动条时,自动加载内容 </pre><pre name="code" class="javascript">1. 首先计算li的总数 </pre><pre code_snippet_id="683281" snippet_file_name="blog_20150603_5_4812406" name="code" class="javascript

分享大麦UWP版本开发历程-03.GridView或ListView 滚动底部自动加载后续数据

今天跟大家分享的是大麦UWP客户端,在分类.订单或是搜索时都用到的一个小技巧,技术粗糙大神勿喷. 以大麦分类举例,默认打开的时候,会为用户展示20条数据,当用户滚动鼠标或者使用手势将列表滑动到倒数第二行的位置时,自动加载后续20条数据.提高启动速度的同时稍稍节省用户的流量. 其他的就不说了,直接进入代码阶段. Step1,界面部分很简单,我放弃了Gridvew自己的滚动,在外面包上了一个ScrollViewr,监听ViewChanged事件(这样代码比较简单,直接用GridView内部的数据变化

Intellij Idea tomcat启动后改动文件自动加载(图文)

一.背景 Intellij的强大毋庸置疑,随着Android Studio的出现到如今,包括博主在内,越来越多的朋友从Eclipse转到了Intellij. 可是在刚上手一款IDE集成开发工具时,由于环境的不熟悉常常会在使用中伴随着种种恼人的情况出现. 二.目的 解决内置tomcat插件服务启动后,修改类.资源时无法自动加载的问题. 三.解决办法 1. 打开右上角的Edit Configuration进入Tomcat配置选项页面 2. 将On frame  deactivation选项更改为 U