简单通用的数据 置顶、上移、下移 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
相关文章推荐
- 对表数据进行(置顶,上移,下移,置底操作)---数据库sql
- 对表数据进行(置顶,上移,下移,置底操作)---数据库sql
- SQL脚本--(通用存储过程)如何删除表中某个字段重复的数据
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
- C#关于如何给数据排序,置顶,上移,下移,置尾
- mysql选择上一条、下一条数据记录,排序上移、下移、置顶
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
- SQL取得树型目录下的数据[通用存储过程]
- sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
- mysql选择上一条、下一条数据记录,排序上移、下移、置顶
- 通用上移,下移,置顶存储。
- SQL取得树型目录下的数据[通用存储过程]
- mysql选择上一条、下一条数据记录,排序上移、下移、置顶
- 又一个通用分页存储过程,支持表别名,多表联合查询SQL语句--转载
- 查询大数据表的效率对比:Linq to SQL、Entity Framework、企业库存储过程、ADO.Net
- SQL创建IP地址数据表存储过程
- SQL 存储过程 通过多个ID更新数据
- asp.net+Sqlserver 通过存储过程读取数据
- 【批量生成10万条sql数据库数据+IO流的使用】生成简单sql插入语句大量数据,以及输出流生成文件2017年
- 实现小数据量和海量数据的通用分页显示存储过程