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

2021-09-05 22:41:05 字數 3747 閱讀 8881

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

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

首先是儲存過程:寫的稍微有些繁瑣,可能是半夜太睏了吧

1alter

procedure

[dbo].

[proc_common_updown]2

34@sign

int=

0,   

--0: 上移 1:下移

5@tablename

nvarchar(50

), --表名6

@itemname

nvarchar(50

),  

--主鍵欄位名

7@itemid

int,             

--主鍵id

8@sortname

nvarchar(50

),     

--排序id

9@typename

nvarchar(50

)='', 

--分類欄位名

10@typevalue

nvarchar(50

)=''--

分類值11

12as

1314

begin

15set

nocount 

on16

17declare

18@sql

nvarchar

(4000

),19

@thissort

int, 

--當前id

20@previd

int, 

--前乙個id

21@nextid

int,  

--後乙個id

22@count

int23

24--

臨時索引表--

25create

table

#tab 26(

27itemid 

int,

28sort 

int29)30

set@sql='

insert into #tab (itemid,sort) select '31

+@itemname+'

,'+@sortname+'

from '+

@tablename

3233if(

@typename

<>

''and

@typevalue

<>

'') 

set@sql

=@sql+'

where '+

@typename+'

='+@typevalue

34set

@sql

=@sql+'

order by sort asc '35

exec

(@sql)36

set@sql=''

3738

select

@count

=count(*

) from

#tab

39select

@thissort

=sort 

from

#tab 

where

itemid 

=@itemid

40if

(@thissort

>1) 

select

@previd

=itemid 

from

#tab 

where

sort=(

@thissort-1

)41if(

@thissort

<

@count

) select

@nextid

=itemid 

from

#tab 

where

sort=(

@thissort+1

)4243if

(@sign=0

)44begin

45if

(@thissort

>1)

46begin

47set

@sql='

update '+

@tablename+'

set '+

@sortname+'

='+convert

(varchar

(100

),(@thissort-1

))+'where '+

@itemname+'

= '+convert

(varchar

(100

),@itemid) +

';'48

+'update '+

@tablename+'

set '+

@sortname+'

='+convert

(varchar

(100

),@thissort)+

'where '+

@itemname+'

= '+convert

(varchar

(100

),@previd)49

50end

51end

52else

53begin

54if

(@thissort

<

@count)55

begin

56set

@sql='

update '+

@tablename+'

set '+

@sortname+'

='+convert

(varchar

(100

),(@thissort+1

))+'where '+

@itemname+'

= '+convert

(varchar

(100

),@itemid) +

';'57

+'update '+

@tablename+'

set '+

@sortname+'

='+convert

(varchar

(100

),@thissort)+

'where '+

@itemname+'

= '+convert

(varchar

(100

),@nextid)58

end59

end60

61exec

(@sql)62

63end64

資料層的公共類:

public

class

common}

資料層(dal)具體的呼叫:cms_channel 表的排序功能

public

void

updown(

intsign, 

intitemid)

至於業務邏輯層或者web層的呼叫基本就很簡單了:

updown(111, 0);上移

updown(111, 1);下移

**:

上移 下移功能

實現資料的上移和下移功能 實現效果如下 功能實現過程為 上移和下移是交換兩條資料的位置序號。我將主要業務放在service,具體操作放在dao中。上移的service層 public void moveup long id 交換position的值 int temp forum.getpositio...

js上移下移功能

今天分享一下專案裡面用到的乙個小功能,實現上移下移的功能。這裡樣式的話就不寫了,可以根據自己的需求來定義,主要的還是邏輯部分。var moveupordown 500 當前節點的父節點的上乙個兄弟節點運動實現下移效果 t parents bar prev stop animate 500,funct...

通用版上移下移儲存過程

今天終於寫出乙個通用版的上移下移儲存過程,表明,主鍵名,排序欄位名等都是動態的,之前寫了個針對特殊表的上移下移操作顯然顯得很不靈活。在下面的儲存過程中,包含了許多寫動態儲存過程的思想。由於我是新手,尤其是對於動態儲存過程 trans sql 剛剛接觸。接下來一篇寫點關於動態儲存過程的!順便總結一下該...