首页 技术 正文
技术 2022年11月7日
0 收藏 530 点赞 870 浏览 2217 个字

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

  上代码吧

  

IF (SELECT COUNT(*) FROM sysobjects s WHERE s.[type]='P' AND s.name='SP_PAGE_PRACTICAL')>0
DROP PROC SP_PAGE_PRACTICAL;
GO
CREATE PROC SP_PAGE_PRACTICAL(@tbName VARCHAR(50),@Condition NVARCHAR(1000),@ConditionColumn VARCHAR(100),@ConditionColumn2 VARCHAR(100),@ConditionColumn3 VARCHAR(100),@ConditionColumn4 VARCHAR(100),@ConditionColumn5 VARCHAR(100),@SortColumn VARCHAR(100), @isDesc INT,@thisPage INT,@PageRowNumber INT,@sumPage INT OUT)
AS
BEGIN
BEGIN TRANSACTION
DECLARE @exeSql NVARCHAR(1000) ;
DECLARE @sumRowNumber INT,@descStr NVARCHAR(10);
SET @exeSql='select @sumRowNumber=count(*) from '+@tbName+' '+@Condition;
--执行动态SQL获取值
EXEC sp_executesql @exeSql, N'@sumRowNumber int out,@ConditionColumn VARCHAR(100),@ConditionColumn2 VARCHAR(100),
@ConditionColumn3 VARCHAR(100),@ConditionColumn4 VARCHAR(100),@ConditionColumn5 VARCHAR(100)',
@sumRowNumber OUT,@ConditionColumn,@ConditionColumn2,@ConditionColumn3,@ConditionColumn4,@ConditionColumn5;
--计算总页数
SET @sumPage=(@sumRowNumber-1)/@PageRowNumber+1;
--计算分页行
DECLARE @BeginRow INT,@EndRow INT;
SET @BeginRow=(@thisPage-1)*@PageRowNumber+1;
SET @EndRow=@thisPage*@PageRowNumber;
--计算排序
IF @isDesc=1
BEGIN
SET @descStr='desc';
END
ELSE
BEGIN
SET@descStr='asc';
END
SET @exeSql='select * from (select a.*,ROW_NUMBER() OVER(order by '+@SortColumn+' '+@descStr+ ') as rowIndex from '+@tbName+' a '+@Condition+') a where a.rowIndex BETWEEN '+CONVERT(VARCHAR(10),@BeginRow)+' AND '+CONVERT(VARCHAR(10),@EndRow)+'';
EXEC sp_executesql @exeSql,N'@ConditionColumn VARCHAR(100),
@ConditionColumn2 VARCHAR(100),@ConditionColumn3 VARCHAR(100),@ConditionColumn4 VARCHAR(100),
@ConditionColumn5 VARCHAR(100)',@ConditionColumn,@ConditionColumn2,@ConditionColumn3,@ConditionColumn4,@ConditionColumn5;
--事物提交还是回滚
if @@ERROR>0
BEGIN
ROLLBACK TRANSACTION;
END
ELSE
BEGIN
COMMIT TRANSACTION;
END;
END

  我想我的项目里最大5个条件查询就已经OK。根据你的项目来确定有多少个条件吧 。至于参数怎么传递很简单。就需要我们发挥无线的思想了。

DECLARE @sumPage INT;
EXEC SP_PAGE_PRACTICAL ‘tb_User_Info’,’where user_info_id=@ConditionColumn and (1=1 or 1=@ConditionColumn2 or 1=@ConditionColumn3 or 1=@ConditionColumn4 or 1=@ConditionColumn5)’,1,1,1,1,1,’user_info_id’,1,1,10,@sumPage OUT

  上面是我写的测试程序。如果有1个条件我就申明一个其他我全部1=1。完全不和其他条件冲突。

  如果哪位大神有更好的方法和更好的思路可以解决问题。我们可以一起探讨和研究哦

  

  

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,091
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,568
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,416
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,189
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,825
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,908