新版本的SqlServer分佈存儲過程

SQL 2005及以上版本

/****** Object:  StoredProcedure [dbo].[PageQuery]    Script Date: 04/13/2012 14:26:57 ******/  
SET ANSI_NULLS ON  
GO  
SET QUOTED_IDENTIFIER ON  
GO  
-- =============================================  
-- Author:      <Author,,Name>  
-- Create date: <Create Date,,>  
-- Description: <Description,,>  
-- =============================================  
CREATE PROCEDURE [dbo].[Page_Query]  
    @TableName   NVARCHAR(255),         -- 表名  
    @Fields NVARCHAR(1000) = '*',       -- 需要返回的列  
    @OrderFields NVARCHAR(255)='',      -- 排序的字段名,不帶ORDER BY 關鍵字,必填  
    @PageSize   INT = 10,               -- 頁尺寸  
    @PageIndex  INT = 1,                -- 頁碼  
    @Where  NVARCHAR(1500) = '',        -- 查詢條件 (注意: 不要加 where)  
    @NeedCount BIT = 0,  
    @RecordCount INT OUTPUT  
AS  
BEGIN  
    DECLARE @ExceSql NVARCHAR(MAX)  

    IF @Where !=''  
      SET @Where =' WHERE ' + @Where  

    SET @ExceSql='SELECT * FROM (SELECT ROW_NUMBER() OVER ( ORDER BY ' + @OrderFields + ') AS pos,' + @Fields + ' FROM ' + @TableName + @Where + ') AS sp WHERE pos BETWEEN '+STR( ( @PageIndex - 1 ) * @PageSize + 1 ) + ' AND ' + STR( @PageIndex * @PageSize )  
    EXEC (@ExceSql)  

    SET @RecordCount = 0  
    IF @NeedCount = 1  
    BEGIN  
        SET @ExceSql='SELECT @RecordCount=COUNT(1) FROM ' + @TableName + @Where  
        EXEC sp_executesql @ExceSql, N'@RecordCount INT OUTPUT', @RecordCount OUTPUT  
    END  
END  

SQL 2012及以上版本

/****** Object:  StoredProcedure [dbo].[PageQuery]    Script Date: 04/13/2012 14:26:57 ******/  
SET ANSI_NULLS ON  
GO  
SET QUOTED_IDENTIFIER ON  
GO  
-- =============================================  
-- Author:      <Author,,Name>  
-- Create date: <Create Date,,>  
-- Description: <Description,,>  
-- =============================================  
CREATE PROCEDURE [dbo].[Page_Query]  
    @TableName   NVARCHAR(255),         -- 表名  
    @Fields NVARCHAR(1000) = '*',       -- 需要返回的列  
    @OrderFields NVARCHAR(255)='',      -- 排序的字段名,不帶ORDER BY 關鍵字,必填  
    @PageSize   INT = 10,               -- 頁尺寸  
    @PageIndex  INT = 1,                -- 頁碼  
    @Where  NVARCHAR(1500) = '',        -- 查詢條件 (注意: 不要加 where)  
    @NeedCount BIT = 0,  
    @RecordCount INT OUTPUT  
AS  
BEGIN  
    DECLARE @ExceSql NVARCHAR(MAX)  

    IF @Where !=''  
      SET @Where =' WHERE ' + @Where  

    SET @ExceSql='SELECT ' + @Fields + ' FROM ' + @TableName + @Where + ' ORDER BY ' + @OrderFields + ' OFFSET ' + STR( ( @PageIndex - 1 ) * @PageSize ) + ' ROWS FETCH NEXT ' + STR( @PageSize ) + ' ROWS ONLY'
    EXEC (@ExceSql)  

    SET @RecordCount = 0  
    IF @NeedCount = 1  
    BEGIN  
        SET @ExceSql='SELECT @RecordCount=COUNT(1) FROM ' + @TableName + @Where  
        EXEC sp_executesql @ExceSql, N'@RecordCount INT OUTPUT', @RecordCount OUTPUT  
    END  
END  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章