1、增删改—通用存储过程

--增删改 存储过程
create proc Infos_InsertUpdateDelete
(
@Id int,
@Name varchar(50),
@DataTable_Action_ varchar(10) = '' --操作方法:Insert:增加 Update:修改 Delete:删除
)
AS
declare @ReturnValue varchar(18) -- 返回操作结果
set @ReturnValue = -1
--开启事务
begin tran
--错误捕捉机制
begin try
--新增
if(@DataTable_Action_='Insert')
begin
insert into Infos(Name) values(@Name)
select
@ReturnValue = SCOPE_IDENTITY()
end

--删除
if(@DataTable_Action_='Delete')
begin
delete Infos where Id=@Id
set @ReturnValue = @@REMSERVER
end
commit tran

end try
begin catch
rollback tran
end catch
select
@ReturnValue

exec Infos_InsertUpdateDelete @Id,@AId,@DId,@Ceng,@HomeNum,@FSize,@JSize,@HId,@JieGou,@Address,@Path,@XingZhi,@States,@DataTable_Action_

2、查询分页—通用存储过程

Create PROC [dbo].[ProcPageList] (
@pageSize INT = 20, --每页记录数
@pageNo INT =1, --当前页
@tableName VARCHAR(50), --表名
@whereString VARCHAR(800) = ' 1=1 ',--WHERE条件
@orderString VARCHAR(200), --排序条件(倒序需要带desc)
@recordTotal INT OUTPUT --输出记录总数
)
AS
BEGIN
DECLARE @tempSql NVARCHAR(4000)
--输出参数@recordTotal为总记录数
SET @tempSql = N'select @recordTotal = count(*) from ' + @tableName + ' where '+ @whereString
EXEC sp_executesql @tempSql,N'@recordTotal INT OUTPUT',@recordTotal OUTPUT
--主查询返回结果集
SET @tempSql = N'select * from (select *,Row_number() over(order by '+@orderString+') as rows from '+@tableName+' WHERE '+@whereString+') as main_temp where rows BETWEEN '+ convert(varchar(100),(@pageNo - 1) * @pageSize+ 1) + ' and ' + convert(varchar(100),@pageNo * @pageSize)
EXEC(@tempSql)
END

3、比较完整的查询分页存储过程

create PROCEDURE [dbo].[commonPagination]
@columns varchar(500), --要显示的列名,用逗号隔开 
@tableName varchar(100), --要查询的表名 
@orderColumnName varchar(100), --排序的列名 
@order varchar(50), --排序的方式,升序为asc,降序为 desc 
@where varchar(100), --where 条件,如果不带查询条件,请用 1=1 
@pageIndex int, --当前页索引 
@pageSize int, --页大小(每页显示的记录条数) 
@pageCount int out --总页数,输出参数 
as 
begin 
declare @sqlRecordCount nvarchar(1000) --得到总记录条数的语句 
declare @sqlSelect nvarchar(1000) --查询语句 
set @sqlRecordCount=N'select @recordCount=count(*) from ' +@tableName + ' where '+ @where

declare @recordCount int --保存总记录条数的变量 
exec sp_executesql @sqlRecordCount,N'@recordCount int output',@recordCount output

--动态 sql 传参 
if( @recordCount % @pageSize = 0) --如果总记录条数可以被页大小整除 
set @pageCount = @recordCount / @pageSize --总页数就等于总记录条数除以页大小 
else --如果总记录条数不能被页大小整除 
set @pageCount = @recordCount / @pageSize + 1 --总页数就等于总记录条数除以页大小加1

set @sqlSelect = 
N'select '+@columns+' from ( 
select row_number() over (order by ' 
+@orderColumnName+' '+@order 
+') as tempid,* from ' 
+@tableName+' where '+ @where 
+') as tempTableName where tempid between ' 
+str((@pageIndex - 1)*@pageSize + 1 ) 
+' and '+str( @pageIndex * @pageSize) 
exec (@sqlSelect) --执行动态Sql 
end

SqlServer通用存储过程的更多相关文章

  1. MS SQLSERVER通用存储过程分页

    最近在面试的时候,遇到个奇葩的秃顶老头面试官. 问:写过存储过程分页吗? 答:没写过,但是我知道分页存储的原理,我自己也写过,只是在工作中没写过. 问:那你这么多年工作中就没写过吗? 答:的确没写过, ...

  2. ERP通用存储过程封装(三)

    一:解释      SQL Server提供了一种方法:可以将一些预先编译的SQL语句集中起来由SQL Server数据库服务器来完成以实现某个任务,这就是存储过程.存储过程常驻在SQL Server ...

  3. Sqlserver中存储过程,触发器,自定义函数(二)

    Sqlserver中存储过程,触发器,自定义函数: 自定义函数:1.函数类型:2.函数的参数和返回值: 1.函数类型:标量值函数,返回的是一个标量值表值函数:内联表值函数:多语句表值函数. 标量值函数 ...

  4. Sqlserver中存储过程,触发器,自定义函数(一)

    Sqlserver中存储过程,触发器,自定义函数 1.存储过程有关内容存储过程的定义:存储过程的分类:存储过程的创建,修改,执行:存储过程中参数的传递,返回与接收:存储过程的返回值:存储过程使用游标. ...

  5. Sqlserver中存储过程,触发器,自定义函数

    Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...

  6. JSON序列化及利用SqlServer系统存储过程sp_send_dbmail发送邮件(一)

    JSON序列化 http://www.cnblogs.com/yubaolee/p/json_serialize.html 利用SqlServer系统存储过程sp_send_dbmail发送邮件(一) ...

  7. 改良版的SQL Service 通用存储过程分页

    上次写了通用存储过程.感觉还是有很大的BUG.就是条件不能参数画化.这个BUG可以说是致命的.但是我一直想在用什么方法能解决这个东西.其实我只是想写少量的代码来做更多的事情.我想能不能传集合给存储过程 ...

  8. SqlServer中存储过程中将Exec的执行结果赋值给变量输出

    原文 SqlServer中存储过程中将Exec的执行结果赋值给变量输出 背景: 遇到这样一种情况:动态向存储过程中传入表名和表的某些属性(这里用到的是主键ID),然后利用这两个变量查出一条数据的某些字 ...

  9. SqlServer复杂存储过程

    SqlServer复杂存储过程 CREATE PROCEDURE FETCH_GOOUT_INFO AS BEGIN WITH l as(SELECT A.ZJHM, O.KSQR, O.JSRQ, ...

随机推荐

  1. C++—程序的内存分区

    代码区 ​ 程序被操作系统加载到内存时,所有可执行的代码被加载到代码区,也叫代码段,存储程序的代码指令.程序运行时,这段区域数据不可被修改只可以被执行. 静态区 ​ 程序中的静态变量.全局变量存放在此 ...

  2. 各个系统下ping IP+端口的方法

    前言 做开发的人员,可能都会遇到网络的一些问题.这时一般都需要测试指定的网络是否能正常访问.通常在windows系统下,在cmd里直接用命令ping指定的IP或者域名就可以快速的知道这个地址是否是可以 ...

  3. Java中的Interrupt使用

    初心 用interrupt中断程序 初步实现 public class InterruptionInJava implements Runnable{ @Override public void ru ...

  4. greenev —— Python 异步网络服务框架

    greenev是一个基于greenlet协程,事件驱动,非阻塞socket模型的Python网络服务框架,它使得可以编写同步的代码,却得到异步执行的优点. 本项目受到gevent, openresty ...

  5. [总结] wqs二分学习笔记

    论文 提出问题 在某些题目中,强制规定只能选 \(k\) 个物品,选多少个和怎么选都会影响收益,问最优答案. 算法思想 对于上述描述的题目,大部分都可以通过枚举选择物品的个数做到 \(O(nk^2)\ ...

  6. 特征脸是怎么提取的之主成分分析法PCA

    机器学习笔记 多项式回归这一篇中,我们讲到了如何构造新的特征,相当于对样本数据进行升维. 那么相应的,我们肯定有数据的降维.那么现在思考两个问题 为什么需要降维 为什么可以降维 第一个问题很好理解,假 ...

  7. anoconda包管理汇总

    anoconda默认的seaborn版本是0.8.1 seaborn的最新版本是0.9.0  并且已经没有0.8.1的文档了. 升级anoconda的seaborn版本 进入anoconda prom ...

  8. C#之WebApi权限认证_学习笔记1

    自己并不懂,在此先记录下来,留待以后学习... 正文 前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请 ...

  9. 第一册:lesson sixty three。

    原文: Thank you docter. A:How's Jim today? B:Better, thank you docter. A:Can I see him ,please? B:Cert ...

  10. Centos7.6安装Oracle数据库

    一.安装Oracle前准备 1.创建运行oracle数据库的系统用户和用户组 [humf@localhost ~]$ su root #切换到root Password: [root@localhos ...