您的位置:首页 > 数据库

简单通用的数据 置顶、上移、下移 sql 存储过程

2013-09-11 11:52 375 查看
[code]CREATEprocedure[dbo].[UpdateTabelDataOrder]
@tablevarchar(50),--表名称
@tableIdvarchar(50),--表主键ID字段
@orderStrvarchar(50),--排序字段名称
@idvarchar(20),--数据ID
@typevarchar(20)--移动类型
as
declare@orderidvarchar(50),--排序ID
@outPutValueint,--输出值
@tablenamenvarchar(50),--表名称
@filtercolumnnvarchar(50),--条件字段
@columnvaluenvarchar(50),--主键id值
@countnamenvarchar(50),--查询的字段,排序字段
@sqlnvarchar(max)--执行内部sql
set@tablename=@table
set@filtercolumn=@tableId
set@columnvalue=@id
set@countname=@orderStr
--第一步:处理动态表,列名,得到排序ID
set@sql='select@outValue='+@countname+'from'+quotename(@tablename)+'where'
execsp_executesql
@sql,
asnvarchar(50),@outValueasintoutput',
@cv=@columnvalue,
@outValue=@outPutValueoutput;--使用输出参数为变量@outPutValue赋值,变量后加关键字output
set@orderid=@outPutValue
--数据上移操作
if(@type='up')
begin
begintransaction
--第二步:处理第一条数据异常
declare@countNumint,@sql_2nvarchar(max)
set@sql_2='select@outValue=count(*)from'+quotename(@tablename)+'where<'+@orderid
execsp_executesql
@sql_2,
asintoutput',
@outValue=@outPutValueoutput
set@countNum=@outPutValue
if(@countNum)>0
begin
--第三步:查询操作数据ID的上一条数据ID
declare@board_Idint--和本数据相邻的上一条OrderId
declare@orderboard_Idint--和本数据相邻的上一条OrderboardId
declare@sql_3nvarchar(max)
set@sql_3='selecttop1@outValue='+@filtercolumn+'from'+quotename(@tablename)
+'wherein(selectfrom'+quotename(@tablename)
+'where<)orderbydesc'
execsp_executesql
@sql_3,
asintoutput',
@outValue=@outPutValueoutput
set@board_Id=@outPutValue
set@sql_3='selecttop1@outValue='+@countname+'from'+quotename(@tablename)
+'wherein(selectfrom'+quotename(@tablename)
+'where<)orderbydesc'
execsp_executesql
@sql_3,
asintoutput',
@outValue=@outPutValueoutput
set@orderboard_Id=@outPutValue
--第四步:对相关数据依次进行处理
declare@sql_4nvarchar(max)
set@sql_4='update'+quotename(@tablename)+'set=@zdzhiwhere=@id'
execsp_executesql
@sql_4,
asint,@idasvarchar(50)',
@zdzhi=@orderboard_Id,
@id=@columnvalue
set@sql_4='update'+quotename(@tablename)+'set=@zdzhiwhere=@upid'
execsp_executesql
@sql_4,
asint,@upidasint',
@zdzhi=@orderid,
@upid=@board_Id
if@@error<>0
begin
rollbacktran
end
else
begin
committransaction
end
end
else--恢复@@trancount初始值,处理@@trancountbug
begin
committransaction
end
end
--下移操作
if(@type='down')
begin
begintransaction
--第二步:处理第一条数据异常
declare@countNum2int,@sql_7nvarchar(max)
set@sql_7='select@outValue=count(*)from'+quotename(@tablename)+'where>'+@orderid
execsp_executesql
@sql_7,
asintoutput',
@outValue=@outPutValueoutput
set@countNum2=@outPutValue
if(@countNum2)>0
begin
--第三步:查询操作数据ID的上一条数据ID
declare@board_Id2int--和本数据相邻的上一条OrderId
declare@orderboard_Id2int--和本数据相邻的上一条OrderboardId
declare@sql_5nvarchar(max)
set@sql_5='selecttop1@outValue='+@filtercolumn+'from'+quotename(@tablename)
+'wherein(selectfrom'+quotename(@tablename)
+'where>)orderby'
execsp_executesql
@sql_5,
asintoutput',
@outValue=@outPutValueoutput
set@board_Id2=@outPutValue
set@sql_5='selecttop1@outValue='+@countname+'from'+quotename(@tablename)
+'wherein(selectfrom'+quotename(@tablename)
+'where>)orderby'
execsp_executesql
@sql_5,
asintoutput',
@outValue=@outPutValueoutput
set@orderboard_Id2=@outPutValue
--第四步:对相关数据依次进行处理
declare@sql_6nvarchar(max)
set@sql_6='update'+quotename(@tablename)+'set=@zdzhiwhere=@id'
execsp_executesql
@sql_6,
asint,@idasvarchar(50)',
@zdzhi=@orderboard_Id2,
@id=@columnvalue
set@sql_6='update'+quotename(@tablename)+'set=@zdzhiwhere=@upid'
execsp_executesql
@sql_6,
asint,@upidasint',
@zdzhi=@orderid,
@upid=@board_Id2
if@@error<>0
begin
rollbacktran
end
else
begin
committransaction
end
end
else--恢复@@trancount初始值,处理@@trancountbug
begin
committransaction
end
end
--置顶操作
if(@type='top')
begin
begintransaction
--第二步:处理第一条数据异常
declare@countNum3int,@sql_8nvarchar(max)
set@sql_8='select@outValue=count(*)from'+quotename(@tablename)+'where<'+@orderid
execsp_executesql
@sql_8,
asintoutput',
@outValue=@outPutValueoutput
set@countNum3=@outPutValue
if(@countNum3)>0
begin
--第三步:查询操作数据ID的上一条数据ID
set@sql_8='update'+quotename(@tablename)+'set=+1where
+'in(selectfrom'+quotename(@tablename)+'wherein'
+'(selectfrom'+quotename(@tablename)+'where<))'
print@sql_8
execsp_executesql
@sql_8
set@sql_8='update'+quotename(@tablename)+'set=1where=@upid'
execsp_executesql
@sql_8,
asint',
@upid=@columnvalue
if@@error<>0
begin
rollbacktran
end
else
begin
committransaction
end
end
else--恢复@@trancount初始值,处理@@trancountbug
begin
committransaction
end
end


http://www.oschina.net/code/snippet_934456_24262
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐