日期:2014-05-18  浏览次数:20449 次

还是老问题,分页存储过程。(帮顶有分)
我用的是邹建的分页存储过程;

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

CREATE Proc [dbo].[p_show]
@QueryStr nvarchar(4000), --表名、视图名、查询语句
@PageSize int=10, --每页的大小(行数)
@PageCurrent int=1, --要显示的页
@FdShow nvarchar (4000)='', --要显示的字段列表,如果查询结果有标识字段,需要指定此值,且不包含标识字段
@FdOrder nvarchar (1000)='' --排序字段列表

.........略

@QueryStr参数是一个查询语句sqlStr,而本身这个sqlStr也是带参数的。
我只能在程序里设置存储过程那5个参数的值,但没法设sqlStr这句sql语句中参数的值。请教各位高手解决方法。

------解决方案--------------------
那你为什么不把那些参数也整合到PROC里?
------解决方案--------------------
your are right!
but you can try:
@QueryStr="select * from tableName where col1='"+col1(C#)+"'";
------解决方案--------------------
@QueryStr 这个可以是表名
在存储过程里写查询语句
------解决方案--------------------
那就再建一个存储过程,在里面先设置sqlStr的参数,然后再调用分页存储过程
------解决方案--------------------
把你需要的参数也传值到存储过程里,然后在里面拼接字符串就好了啊
------解决方案--------------------
你可试试把.@QueryStr参数是一个查询语句sqlStr,而本身这个sqlStr也是带参数的 这两个都当作参数来试试..
------解决方案--------------------
关注
------解决方案--------------------
帮顶!
------解决方案--------------------
人过留名
------解决方案--------------------
SQL code

 ALTER PROCEDURE [dbo].[Components_MultiPage]
    @TableName NVARCHAR(MAX),
    @Fields NVARCHAR(MAX),
    @Where NVARCHAR(MAX),
    @OrderBy NVARCHAR(MAX),
    @Groupby NVARCHAR(MAX),
    @PageIndex INT,
    @PageSize INT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    DECLARE @BeginIndex INT
    DECLARE @EndIndex INT
    DECLARE @Sql NVARCHAR(MAX)
    DECLARE @SqlCount NVARCHAR(MAX)    
    DECLARE @GroupbyString NVARCHAR(MAX)
    IF(@Where = '') BEGIN
        SET @Where = '1 = 1'
    END
    SELECT @BeginIndex = (@PageIndex - 1) * @PageSize
    SELECT @EndIndex = @PageIndex * @PageSize
    
    IF(@Groupby <> N'') BEGIN
        SET @GroupbyString = N' GROUP BY ' + @Groupby
    END ELSE BEGIN
        SET @GroupbyString = N' '
    END
    SET @Sql = N'
    BEGIN WITH TheTable AS(
        SELECT ' + @Fields + ', ROW_NUMBER() OVER(ORDER BY ' + @OrderBy + ') AS RowNumber
        FROM ' + @TableName + ' WHERE ' + @Where + ' ' + @GroupbyString + ')
        SELECT * FROM TheTable WHERE RowNumber > ' + CONVERT(NVARCHAR(255), @BeginIndex) + ' AND RowNumber <= ' + CONVERT(NVARCHAR(255), @EndIndex) + '
    END'
    SET @SqlCount = N'SELECT COUNT(*) AS [Rows] FROM ' + @TableName + ' WHERE ' + @Where  + '  '
    
--    PRINT @Sql
--    PRINT @SqlCount
    EXECUTE SP_EXECUTESQL @Sql
    EXECUTE SP_EXECUTESQL @SqlCount
--    DEBUG
--    EXECUTE SP_EXECUTESQL  dbo.Components_MultiPage 'User_Users', 'UserId', '', 'UserId', 1, 30
END

------解决方案--------------------
这是SQL的存储过程,不是原创的.

CREATE Procedure BENNY_QueryRecordByPage
(
@PageSize int, --一页多少记录
@PageNumber int, --第几页
@QuerySql varchar(1000),--???????,?* From Test order by id desc
@KeyField varchar(500)
)
AS
Begin

Declare @SqlTable AS varchar(1000)
Declare @SqlText AS Varchar(1000)
Declare @RCount AS int

Set @SqlTable='Select Top '+CAST(@PageNumber*@PageSize AS varchar(30))+' '+@QuerySql