SQL Server 通用的排序的上移下移功能
发布时间:2020-12-12 12:32:42 所属栏目:MsSql教程 来源:网络整理
导读:前两天需要实现一个上移下移功能,就上网上搜了一下,没想到这个简单的小功能也没有搜到特别理想的结果,只有自己动手丰衣足食了,虽然简单,但是希望对大家有所帮助。 功能:实现任意有排序字段表单的上移和下移,并可以按分类来操作排序。 首先是存储过程
前两天需要实现一个上移下移功能,就上网上搜了一下,没想到这个简单的小功能也没有搜到特别理想的结果,只有自己动手丰衣足食了,虽然简单,但是希望对大家有所帮助。 功能:实现任意有排序字段表单的上移和下移,并可以按分类来操作排序。 首先是存储过程:写的稍微有些繁琐: ALTER PROCEDURE [dbo].[Proc_Common_UpDown]@Sign int = 0,-- 0: 上移 1:下移 @TableName nvarchar(50),-- 表名 @ItemName nvarchar(50),-- 主键字段名 @ItemID int,-- 主键ID @SortName nvarchar(50),-- 排序ID @TypeName nvarchar(50)='',-- 分类字段名 @TypeValue nvarchar(50)= '' -- 分类值 AS BEGIN SET NOCOUNT ON DECLARE @SQL nvarchar(4000), @ThisSort int,-- 当前ID @PREVID int,-- 前一个ID @NextID int,-- 后一个ID @Count int --临时索引表-- CREATE TABLE #Tab ( ItemID int, Sort int ) SET @SQL = 'INSERT INTO #Tab (ItemID,Sort) SELECT ' +@ItemName+','+@SortName+' FROM '+@TableName IF (@TypeName<>'' AND @TypeValue<>'') SET @SQL = @SQL+' WHERE '+@TypeName+'='+@TypeValue SET @SQL = @SQL+' ORDER BY Sort ASC ' EXEC(@SQL) SET @SQL = '' SELECT @Count = COUNT(*) FROM #Tab SELECT @ThisSort = Sort FROM #Tab WHERE ItemID = @ItemID IF(@ThisSort>1) SELECT @PREVID = ItemID FROM #Tab WHERE Sort=(@ThisSort-1) IF(@ThisSort<@Count) SELECT @NextID = ItemID FROM #Tab WHERE Sort=(@ThisSort+1) IF(@Sign=0) BEGIN IF(@ThisSort>1) BEGIN SET @SQL = 'UPDATE '+@TableName+' SET '+@SortName+'='+CONVERT(varchar(100),(@ThisSort-1))+' WHERE '+@ItemName+' = '+CONVERT(varchar(100),@ItemID) + ';' + 'UPDATE '+@TableName+' SET '+@SortName+'='+CONVERT(varchar(100),@ThisSort)+' WHERE '+@ItemName+' = '+CONVERT(varchar(100),@PREVID) END END ELSE BEGIN IF(@ThisSort<@Count) BEGIN SET @SQL = 'UPDATE '+@TableName+' SET '+@SortName+'='+CONVERT(varchar(100),(@ThisSort+1))+' WHERE '+@ItemName+' = '+CONVERT(varchar(100),@NextID) END END EXEC(@SQL) END 数据层的公共类: public class Common{ public static Database db = DatabaseFactory.CreateDatabase("Huoqk_CMS"); /// <summary> /// 上移下移 /// </summary> /// <param name="Sign">移动方向:0 上移, 1下移</param> /// <param name="TableName">表名</param> /// <param name="ItemName">主键名</param> /// <param name="ItemID">主键ID</param> /// <param name="SortName">排序字段</param> /// <param name="TypeName">类型名</param> /// <param name="TypeValue">类型ID</param> public static void UPDown(int Sign,string TableName,string ItemName,int ItemID,string SortName,string TypeName,string TypeValue) { string spName = "Proc_Common_UpDown"; DbCommand dbCommand = db.GetStoredProcCommand(spName); db.AddInParameter(dbCommand,"Sign",DbType.Int32,Sign); db.AddInParameter(dbCommand,"TableName",DbType.String,TableName); db.AddInParameter(dbCommand,"ItemName",ItemName); db.AddInParameter(dbCommand,"ItemID",ItemID); db.AddInParameter(dbCommand,"SortName",SortName); db.AddInParameter(dbCommand,"TypeName",TypeName); db.AddInParameter(dbCommand,"TypeValue",TypeValue); db.ExecuteNonQuery(dbCommand); } } 数据层(DAL)具体的调用:CMS_Channel 表的排序功能: public void UPDown(int sign,int itemid){ Common.UPDown(sign,"CMS_Channel","CID",itemid,"Sort","",""); } 至于业务逻辑层或者Web层的调用基本就很简单了: UPDown(111,0);上移UPDown(111,1);下移 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |