国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

改良版的SQL Service 通用存儲過程分頁

2024-07-21 02:47:07
字體:
來源:轉載
供稿:網友
改良版的SQL Service 通用存儲過程分頁

  上次寫了通用存儲過程。感覺還是有很大的BUG。就是條件不能參數畫化。這個BUG可以說是致命的。但是我一直想在用什么方法能解決這個東西。其實我只是想寫少量的代碼來做更多的事情。我想能不能傳集合給存儲過程但是好像這個是行不通沒辦法只能寫死。

  上代碼吧

  

IF (SELECT COUNT(*) FROM sysobjects s WHERE s.[type]='P' AND s.name='SP_PAGE_PRACTICAL')>0DROP 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=1BEGINSET @descStr='desc';ENDELSEBEGINSET@descStr='asc';ENDSET @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>0BEGINROLLBACK TRANSACTION;ENDELSEBEGINCOMMIT 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。完全不和其他條件沖突。

  如果哪位大神有更好的方法和更好的思路可以解決問題。我們可以一起探討和研究哦

  

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定陶县| 旌德县| 江口县| 醴陵市| 文安县| 宝丰县| 宝坻区| 肥城市| 玛沁县| 光泽县| 潮州市| 宁远县| 喜德县| 奉新县| 拜城县| 吐鲁番市| 徐闻县| 兰溪市| 大埔区| 万盛区| 宕昌县| 雷山县| 巴塘县| 金川县| 永春县| 本溪| 花莲县| 绥宁县| 长武县| 龙游县| 乾安县| 枝江市| 巫溪县| 城固县| 贵定县| 绍兴县| 陆川县| 图木舒克市| 墨脱县| 正蓝旗| 建瓯市|