存储过程只是针对【排序字段】是datetime类型设计 有局限性,欢迎批评指正
代码
/*
过程说明:上下移动排序
创建时间:2010年1月12日
作者:fengxb
debug:存储过程只是针对【排序字段】是datetime类型设计 有局限性
*/
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
alter PROCEDURE [dbo].[P_Move]
(
@keyByteName varchar(20)='fun_id', --主键字段名称
@keyByteNameValue varchar(100)='14', --主键值
@tableName varchar(80)='touch_Recreation', --表名
@moveType varchar(10)='up', --移动方向
@sortByteName varchar(20)='fun_no', --排序字段
@sWhereIf varchar(800)='' --查询条件
)
as
declare @SQL nvarchar(4000)
declare @tempID nvarchar(20)
declare @tempCursorID nvarchar(20)
declare @tempCursorOrder datetime
declare @VarID nvarchar(20)
declare @VarOrder datetime
set @VarID=''
--创建临时表
Create Table #temp_moveTable
(
temp_id [nvarchar](100) COLLATE Chinese_PRC_CI_AS NULL,
temp_order datetime,
)
if @moveType='up'
begin
if @sWhereIf=''
set @SQL = N'insert into #temp_moveTable select top 2 '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'<='+@keyByteNameValue+' order by '+@sortByteName+' desc'
else
set @SQL = N'insert into #temp_moveTable select top 2 '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'<='+@keyByteNameValue+' and '+@sWhereIf+' order by '+@sortByteName+' desc'
end
if @moveType='down'
begin
if @sWhereIf=''
set @SQL = N'insert into #temp_moveTable select top 2 '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'>='+@keyByteNameValue+' order by '+@sortByteName+' asc' --order by list_order asc
else
set @SQL = N'insert into #temp_moveTable select top 2 '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'>='+@keyByteNameValue+' and '+@sWhereIf+' order by '+@sortByteName+' asc'
end
if @moveType='top'
begin
if @sWhereIf=''
set @SQL = N'insert into #temp_moveTable select top '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'<='+@keyByteNameValue+' order by '+@sortByteName+' desc' --order by list_order asc
else
set @SQL = N'insert into #temp_moveTable select top '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'<='+@keyByteNameValue+' and '+@sWhereIf+' order by '+@sortByteName+' desc'
end
if @moveType='bottom'
begin
if @sWhereIf=''
set @SQL = N'insert into #temp_moveTable select top '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'>='+@keyByteNameValue+' order by '+@sortByteName+' asc' --order by list_order asc
else
set @SQL = N'insert into #temp_moveTable select top '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'>='+@keyByteNameValue+' and '+@sWhereIf+' order by '+@sortByteName+' asc'
end
exec(@SQL)
declare temp_move_cousor cursor for select temp_id,temp_order from #temp_moveTable
open temp_move_cousor
fetch next from temp_move_cousor into @tempCursorID,@tempCursorOrder
while @@fetch_status=0
begin
if @VarID=''
begin
set @VarID=@tempCursorID
set @VarOrder=@tempCursorOrder
end
else
begin
select top 2 fun_id,fun_no from touch_Recreation where fun_id<=14 and mr_id=44 and mr_type=0 order by fun_no desc
set @SQL = N'update '+@tableName+' set '+@sortByteName+' =@tempInOrder1 where '+@keyByteName+' = '+@tempCursorID+'
update '+@tableName+' set '+@sortByteName+' =@tempInOrder2 where '+@keyByteName+' = '+@VarID+'
select @tempOutOrder = '+@sortByteName+' from '+@tableName+' where '+@keyByteName+' = '+@VarID+' '
EXECUTE sp_executesql @SQL,N'@tempOutOrder datetime output,@tempInOrder1 datetime,@tempInOrder2 datetime',@tempOutOrder= @VarOrder,@tempInOrder1=@VarOrder,@tempInOrder2=@tempCursorOrder
end
fetch next from temp_move_cousor into @tempCursorID,@tempCursorOrder
end
close temp_move_cousor --关闭游标
deallocate temp_move_cousor
if exists (select 1 from tempdb..sysobjects where name like '#temp_moveTable%' )
begin
drop table #temp_moveTable
end
过程说明:上下移动排序
创建时间:2010年1月12日
作者:fengxb
debug:存储过程只是针对【排序字段】是datetime类型设计 有局限性
*/
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
alter PROCEDURE [dbo].[P_Move]
(
@keyByteName varchar(20)='fun_id', --主键字段名称
@keyByteNameValue varchar(100)='14', --主键值
@tableName varchar(80)='touch_Recreation', --表名
@moveType varchar(10)='up', --移动方向
@sortByteName varchar(20)='fun_no', --排序字段
@sWhereIf varchar(800)='' --查询条件
)
as
declare @SQL nvarchar(4000)
declare @tempID nvarchar(20)
declare @tempCursorID nvarchar(20)
declare @tempCursorOrder datetime
declare @VarID nvarchar(20)
declare @VarOrder datetime
set @VarID=''
--创建临时表
Create Table #temp_moveTable
(
temp_id [nvarchar](100) COLLATE Chinese_PRC_CI_AS NULL,
temp_order datetime,
)
if @moveType='up'
begin
if @sWhereIf=''
set @SQL = N'insert into #temp_moveTable select top 2 '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'<='+@keyByteNameValue+' order by '+@sortByteName+' desc'
else
set @SQL = N'insert into #temp_moveTable select top 2 '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'<='+@keyByteNameValue+' and '+@sWhereIf+' order by '+@sortByteName+' desc'
end
if @moveType='down'
begin
if @sWhereIf=''
set @SQL = N'insert into #temp_moveTable select top 2 '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'>='+@keyByteNameValue+' order by '+@sortByteName+' asc' --order by list_order asc
else
set @SQL = N'insert into #temp_moveTable select top 2 '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'>='+@keyByteNameValue+' and '+@sWhereIf+' order by '+@sortByteName+' asc'
end
if @moveType='top'
begin
if @sWhereIf=''
set @SQL = N'insert into #temp_moveTable select top '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'<='+@keyByteNameValue+' order by '+@sortByteName+' desc' --order by list_order asc
else
set @SQL = N'insert into #temp_moveTable select top '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'<='+@keyByteNameValue+' and '+@sWhereIf+' order by '+@sortByteName+' desc'
end
if @moveType='bottom'
begin
if @sWhereIf=''
set @SQL = N'insert into #temp_moveTable select top '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'>='+@keyByteNameValue+' order by '+@sortByteName+' asc' --order by list_order asc
else
set @SQL = N'insert into #temp_moveTable select top '+@keyByteName+','+@sortByteName+' from '+@tableName+' where '+@keyByteName+'>='+@keyByteNameValue+' and '+@sWhereIf+' order by '+@sortByteName+' asc'
end
exec(@SQL)
declare temp_move_cousor cursor for select temp_id,temp_order from #temp_moveTable
open temp_move_cousor
fetch next from temp_move_cousor into @tempCursorID,@tempCursorOrder
while @@fetch_status=0
begin
if @VarID=''
begin
set @VarID=@tempCursorID
set @VarOrder=@tempCursorOrder
end
else
begin
select top 2 fun_id,fun_no from touch_Recreation where fun_id<=14 and mr_id=44 and mr_type=0 order by fun_no desc
set @SQL = N'update '+@tableName+' set '+@sortByteName+' =@tempInOrder1 where '+@keyByteName+' = '+@tempCursorID+'
update '+@tableName+' set '+@sortByteName+' =@tempInOrder2 where '+@keyByteName+' = '+@VarID+'
select @tempOutOrder = '+@sortByteName+' from '+@tableName+' where '+@keyByteName+' = '+@VarID+' '
EXECUTE sp_executesql @SQL,N'@tempOutOrder datetime output,@tempInOrder1 datetime,@tempInOrder2 datetime',@tempOutOrder= @VarOrder,@tempInOrder1=@VarOrder,@tempInOrder2=@tempCursorOrder
end
fetch next from temp_move_cousor into @tempCursorID,@tempCursorOrder
end
close temp_move_cousor --关闭游标
deallocate temp_move_cousor
if exists (select 1 from tempdb..sysobjects where name like '#temp_moveTable%' )
begin
drop table #temp_moveTable
end

浙公网安备 33010602011771号