多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > Sqlserver > SQL Server 通用的排序的上移下移功能

SQL Server 通用的排序的上移下移功能

來源:程序員人生   發布時間:2013-12-09 14:16:37 閱讀次數:3098次

前兩天需要實現一個上移下移功能,就上網上搜了一下,沒想到這個簡單的小功能也沒有搜到特別理想的結果,只有自己動手豐衣足食了,雖然簡單,但是希望對大家有所幫助。

功能:實現任意有排序字段表單的上移和下移,并可以按分類來操作排序。

首先是存儲過程:寫的稍微有些繁瑣:

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),@ItemID) + ';'
+ 'UPDATE '+@TableName+' SET '+@SortName+'='+CONVERT(varchar(100),@ThisSort)+' 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", DbType.String, ItemName);
db.AddInParameter(dbCommand, "ItemID", DbType.Int32, ItemID);
db.AddInParameter(dbCommand, "SortName", DbType.String, SortName);
db.AddInParameter(dbCommand, "TypeName", DbType.String, TypeName);
db.AddInParameter(dbCommand, "TypeValue", DbType.String, 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);下移
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
為碼而活
積分:4237
15粉絲
7關注
欄目熱點
關閉
程序員人生
主站蜘蛛池模板: 最近中文字幕免费在线看 | 久久免费精品国产72精品剧情 | 福利片福利一区二区三区 | 午夜影院欧美 | 美女上床视频 | 亚洲成年人影院 | 欧美日韩精品乱国产 | 国产91极品福利手机观看 | 欧美一级毛片一 | 亚洲视频福利 | 欧美一级毛片免费高清aa | 国产亚洲精品精品国产亚洲综合 | 免费观看的黄色网址 | 欧美理论在线 | 成人午夜视频在线播放 | 美女色哟哟 | 在线免费亚洲 | 天堂tv亚洲tv日本tv不卡 | 2015日韩永久免费视频播放 | 欧美精品一区二区在线观看 | 国产精品视频流白浆免费视频 | 波多野结衣成人 | 日韩一级视频免费观看 | 色综合第一页 | 女男羞羞视频网站免费 | 久草在线观看福利 | 日本在线天堂 | 美国爱爱片视频在线观看 | 一级毛片一级毛片一级级毛片 | 91嫩草国产在线观看免费 | 国产乱码精品一区二区三区中 | 超高清欧美同性videos | 国产精品系列在线一区 | 伊人网站 | h在线观看视频免费网站 | 在线观看男女激情小视频 | 午夜影院免费在线观看 | a级特黄毛片免费观看 | 免费国产一区二区三区四区 | 欧美人成片免费看视频不卡 | 久久精品国产欧美日韩亚洲 |