您的位置:首页 > 其它

通用上移,下移,置顶存储。

2013-06-06 11:24 357 查看
-- =============================================
-- Purpose:  通用上移、下移、置顶存储,用于改变排序字段的值或类似字段
-- Author :  jesser
-- Time   :  2009-10-17
-- =============================================
create procedure [dbo].[do_CommonMoveDown]
@flag				int = 0,			-- 0: 上移 1:下移 2: 置顶
@tableName			nvarchar(50),		-- 表名
@primaryKeyField	nvarchar(50),		-- 主键字段名
@primaryKeyValue	int,				-- 主键值
@sortField			nvarchar(50),		-- 待改变排序字段值的字段名
@groupField			nvarchar(50)='',	-- 分组字段名
@groupFieldValue	nvarchar(50)= ''	-- 分组字段值
AS
begin

declare @sql nvarchar(4000),@swapid int --需要交换排序值的行数据的主键ID
--临时表
create table #tbSwap
(
PrimaryKeyID	int, --主键
OrderID			int  --排序值
)
set @sql = 'insert into #tbSwap (PrimaryKeyID,OrderID) select ' +@primaryKeyField  +','+@sortField+' from '+@tableName
if (@groupField<>'' AND @groupFieldValue<>'')
set @sql = @sql+' where '+@groupField+'='+@groupFieldValue
set @sql = @sql+' order by '+@sortField+' desc '
exec(@sql)
set @sql = ''
if(@flag=0) --上移
begin
select top 1 @swapid=PrimaryKeyID from #tbSwap where OrderID>(select OrderID from #tbSwap where PrimaryKeyID=@primaryKeyValue) order by OrderID asc

set @sql='update '+@tableName+' set '+@sortField+'=(select OrderID from #tbSwap where PrimaryKeyID='+
convert(varchar(15),@swapid)+')'+' where '+@primaryKeyField  +'='+convert(varchar(15),@primaryKeyValue) + ';'

set	@sql=@sql+'update '+@tableName+' set '+@sortField+'=(select OrderID from #tbSwap where PrimaryKeyID='+
convert(varchar(15),@primaryKeyValue)+')'+' where '+@primaryKeyField  +'='+convert(varchar(100),@swapid) + ';'
exec (@sql)
END
IF(@flag=1)     --下移
begin
select top 1 @swapid=PrimaryKeyID from #tbSwap where OrderID<(select OrderID from #tbSwap where PrimaryKeyID=@primaryKeyValue)

set @sql='update '+@tableName+' set '+@sortField+'=(select OrderID from #tbSwap where PrimaryKeyID='+
convert(varchar(15),@swapid)+')'+' where '+@primaryKeyField  +'='+convert(varchar(15),@primaryKeyValue) + ';'

set	@sql=@sql+'update '+@tableName+' set '+@sortField+'=(select OrderID from #tbSwap where PrimaryKeyID='+
convert(varchar(15),@primaryKeyValue)+')'+' where '+@primaryKeyField  +'='+convert(varchar(100),@swapid) + ';'
exec (@sql)
end
if(@flag=2)     --置顶
begin
select top 1 @swapid=PrimaryKeyID from #tbSwap where OrderID=(select max(OrderID) from #tbSwap)

set @sql='update '+@tableName+' set '+@sortField+'=(select OrderID from #tbSwap where PrimaryKeyID='+
convert(varchar(15),@swapid)+')'+' where '+@primaryKeyField  +'='+convert(varchar(15),@primaryKeyValue) + ';'

set	@sql=@sql+'update '+@tableName+' set '+@sortField+'=(select OrderID from #tbSwap where PrimaryKeyID='+
convert(varchar(15),@primaryKeyValue)+')'+' where '+@primaryKeyField  +'='+convert(varchar(100),@swapid) + ';'
exec (@sql)
end
exec(@sql)
end
go
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: