1. 程式人生 > >SQL 分割字串和通用分頁查詢儲存過程

SQL 分割字串和通用分頁查詢儲存過程

USE [sg]  --使用某個資料庫

GO
/****** Object:  StoredProcedure [dbo].[findTableIndex]    Script Date: 2017/4/1 17:02:58 ******/
SET ANSI_NULLS ON
GO
--------------------------------分割字串,生產表----------------------------------------------
go
 create FUNCTION F_split(@c     VARCHAR(2000),    --分割字串,生產表
                         @split VARCHAR(2))
 returns @t TABLE(
   Field VARCHAR(20))
 AS
   BEGIN
       WHILE( Charindex(@split, @c) <> 0 )  -- 字元@c在@split中的位置
         BEGIN
             INSERT @t
                    (Field)
             VALUES (Substring(@c, 1, Charindex(@split, @c) - 1)) --擷取字串,前面部分
 
             SET @c = Stuff(@c, 1, Charindex(@split, @c), '') --擷取字串,後面部分
         END
 
       INSERT @t
              (Field)
       VALUES (@c)
 
       RETURN
   END
go


----------------------------------------------------------通用分頁查詢--------------------------------------------
go
SET QUOTED_IDENTIFIER ON
GO
 ALTER proc [dbo].[findTableIndex](    --通用分頁查詢
    @Table nvarchar(100),    --查詢表名
    @Fields nvarchar(200),    --查詢表名
    @Where nvarchar(3000),    --查詢條件
    @PageIndex int,        --當前頁數  
    @PageSize int        --頁大小
)
    as  
    set nocount ON  --不返回影響行數,提高效率
    set ansi_warnings ON  --當設定為 ON 時,如果聚合函式(如 SUM、AVG、MAX、MIN、STDEV、STDEVP、VAR、VARP 或 COUNT)中出現空值,將生成警告資訊。當設定為 OFF 時,不發出警告。
begin
if (object_id(@Table,N'U') is null)  --查詢表是否存在,防止惡性字元

begin
return '表不存在'
return
end
begin  --統計@Fields中的欄位不在是表中的數量,防止惡性字元
declare @Field nvarchar(20)
set @Field = @Fields
declare @FieldDifferentCount in --統計@Fields中的欄位不在是表中的數量
Select @FieldDifferentCount = COUNT(*)  From dbo.F_split(@Field,',') t1  where  Field not in (select name from syscolumns where id=object_id(@Table) )   -- 查詢@Fields中的欄位通過分割後生產的欄位不在當前表中的數量

if @FieldDifferentCount > 1
begin
return  '存在當前表中不存在的返回欄位'
end
end
begin
if(@PageIndex < 0)
    set @PageIndex = 0;
end
begin
    if(@PageSize < 0)
    set    @PageSize = 0
end
declare @sql varchar(5000)
declare @new_key varchar(5000)
set @new_key = REPLACE(REPLACE(' '[email protected],' )',''),' --','') --替換敏感字元,只要替換這幾個,防止惡性字元
set @sql = 'select top '+CONVERT(varchar,@PageSize)+' '[email protected]+' from (
select top '+CONVERT(varchar,@PageSize*@PageIndex)+' ROW_NUMBER() over (order by id desc) row,* from '[email protected]+Replace(@new_key,'#','''')+' ) a order by id asc'  --由於在key中直接使用 like '%key%'發生異常,就使用 like #key#,到了這裡在替換為 : '
exec(@sql)

end


-----------------------------------------執行儲存過程-----------------------------------------

go
exec findTableIndex 'UserInformation0','*','',1,10

相關推薦

SQL 分割字串通用查詢儲存過程

USE [sg]  --使用某個資料庫 GO /****** Object:  StoredProcedure [dbo].[findTableIndex]    Script Date: 2017/4/1 17:02:58 ******/ SET ANSI_NULLS

查詢儲存過程sql語句

--建立分頁的儲存過程 alter procedure proc_page @tabName varchar(50), @pageIndex int=1, @pageSize int=5, @pk varchar(20)='id', @cols varchar(200)

MSSQL的查詢儲存過程

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go --分頁儲存過程 CREATE PROCEDURE [dbo].[sp_Paging] ( @Tables nvarchar(1000),

bos 第4 (區域excel批量導入、區域通用查詢區的添加、區多條件查詢區導出excel)

sea htm 不能 長安 基金會 格式 address ret body BOS項目筆記 第4天 今天內容安排: 1、區域批量導入功能 jQuery OCUpload(一鍵上傳插件)、apache POI、pinyin4j 2、實現區域的分頁查詢 3、對分頁代碼重構

SQL on HBase -- phoenix 之查詢

        最近一個專案中使用了HBase,有一部分實時查詢的需求。HBase本身只有一種排序,即按照rowkey的字典升序來排序資料。然而我們常常會碰到各種各樣的排序需求。         對於簡單的需求(比如專案確定只有某一種特定排序的需求),則可以通過對rowk

兩個sql server 2000的通用儲存過程

 第一個支援唯一主鍵,第二支援多主鍵,測試過,效率一般 CREATE PROC P_viewPage    /*        no_mIss 分頁儲存過程 2007.2.20  QQ:34813284        適用於單一主鍵或存在唯一值列的表或檢視         

mysqloracle查詢

mysql分頁 分頁查詢 使用 pan mysql分頁查詢 nbsp max 記錄 不能 MYSQL分頁查詢 方式1: select * from table order by id limit m, n;   該語句的意思為,查詢m+n條記錄,去掉前m

通用存儲過程

bsp nbsp 總數 sel exist 使用 con 排序 當前頁 if exists(select * from sys.objects where name=‘存儲過程名稱‘)drop proc 存儲過程名稱goCREATE proc 存儲過程名稱@tableNam

.NET平臺開源專案速覽(7)關於NoSQL資料庫LiteDB的查詢解決過程

  在文章:這些.NET開源專案你知道嗎?讓.NET開源來得更加猛烈些吧!(第二輯) 與 .NET平臺開源專案速覽(3)小巧輕量級NoSQL檔案資料庫LiteDB中,介紹了LiteDB的基本使用情況以及部分技術細節,我還沒有在實際系統中大量使用,但文章釋出後,有不少網友( )反應在實際專案中使用過,效果還

查詢儲存搜尋條件跳轉連結再返回帶回顯思路

      先到controller中找到對應的方法(list),然後result到對應的jsp頁面,在該頁面上用js獲取搜尋條件的id,把id放到頁面隱藏的input中,form表單提交到對應的c

Oracle學習筆記 -儲存過程,自增

Oracled 的欄位自增,查詢,遊標的返回,儲存過程。 1,自增(觸發器) //還有一個條件需要增加一個佇列 create or replace TRIGGER MYSYSTEM.CBOUNCEID BEFORE INSERT ON MYSYSTEM.BOUNCERECORD

MySQL資料庫儲存過程

MySQL的的的的分頁通用的儲存過程可以先寫出這幾行程式碼:SET @ 變數名 = CONCAT('select * from person limit',((1-1)* 5),',',5,''); FROM @變數名;EXECUTE a;當你發現在你的資料庫儲存過程資料夾有

oracle 查詢sql server 查詢sql語句

oracle: SELECT * FROM ( SELECT TEMP.* ,ROWNUM RN FROM ( 表) TEMP WHERE ROWNUM <=currentPage * perPageRows ) WHERE RN >  (currentPage

JAVA 後臺拼接查詢SQL oracle/sqlserver/db2/達夢資料庫通用

JAVA 後臺拼接分頁查詢SQL  /** * 拼接分頁查詢sql<br/> * ORACLE,SQLSERVER,DB2,DM通用 * * @param field * @param from * @param page * @

sqlserver通用sql語句 關聯查詢

 SELECT TOP         (#{pages}*#{limit}) *         FROM         (         SELECT ROW_NUMBER() OVER (O

ajax查詢信息的通用方法

execute .sql sco 結果 tex warnings path lec 組合 1.頁面準備分頁的表格與分頁div   同時需要在查詢條件表單中準備隱藏當前頁與頁大小的文本框 <div class="container-flu

ORACLE查詢SQL語法——高效的

推薦 col 停止 sql 條件 esc 記錄 table select --1:無ORDER BY排序的寫法。(效率最高)--(經過測試,此方法成本最低,只嵌套一層,速度最快!即使查詢的數據量再大,也幾乎不受影響,速度依然!) SELECT * FROM (SEL

mysql sql查詢語句

mysql select body from 記錄 condition rom col mysq SELECT * FROM ‘table‘ ORDER BY ‘condition‘ DESC LIMIT ‘開始索引‘,‘記錄數‘ mysql sql分頁查詢語句

SQL查詢的幾種方式

但是 order 結果 htm sql分頁 sele esc 註意 介紹 https://www.cnblogs.com/lxhbky/p/5962393.html 需求:查詢表dbo.Message,每頁10條,查詢第2頁 1:TOP() SELECT TOP(2

sql 查詢 (每次6行 )

分享 數據 mage com http 行數 -- where SQ -- 對比 數據 是否 相同 select * from [dbo].[ProjecrInfo] where Project_state=‘已審核‘ -- 查詢 已經 審核 有多少數據 -- 每次 按