set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[cpage] (
    @page_num int,                -- 当前页数
    @page_max int,                -- 每页显示条数
    @table varchar(50),            -- 表名
    @id varchar(20),            -- ID字段
    @shows varchar(800),        -- 显示列
    @sort varchar(20),            -- 排序字段(推荐用ID)
    @where varchar(800),        -- 查询条件不推荐用like '%..'
    @order varchar(20),            -- 排序方式
    @record_count int OUTPUT    -- 记录总数
)
ASDECLARE @sql nvarchar(4000), @t_where varchar(800), @t_order varchar(50),
    @page_count float, @mod int, @top intIF @page_num Is Null Or @page_num < 1
    SET @page_num = 1IF @shows Is Null Or LTrim(RTrim(@where)) = ''
    SET @shows = '*'IF @where Is Null Or LTrim(RTrim(@where)) = '' -- 设置条件
    SET @t_where = ''
ELSE
    SET @t_where = ' WHERE ' + LTrim(RTrim(@where))If @order = 'DESC' -- 设置排序
    SET @t_order = 'ASC'
Else
    SET @t_order = 'DESC'SET @sql = 'SELECT @record_count = COUNT(*) FROM ' + @table + @t_whereEXEC sp_executesql @sql, N'@record_count int OUTPUT', @record_count OUTPUT -- 返回记录总数SET @page_count = @record_count / @page_max
SET @mod = @record_count - CAst(@page_count As int) * @page_max
SET @page_count = CAst(@page_count As int) + @mod / @modIF @page_count > @page_num Or @mod = 0 -- 设置显示页数
    SET @top = @page_max
ELSE
    SET @top = @modSET @sql = 'SELECT temp.' + @id + ', data.' + Replace(@shows, ',', ', data.') + ' FROM (' +
    'SELECT TOP ' + CAst(@top As varchar) + ' * FROM (' +
    'SELECT TOP ' + CAst(@page_num * @page_max As varchar) + ' ' + @id +
    ' FROM ' + @table + @t_where + ' ORDER BY ' + @sort + ' ' + @order +
    ' As temp ORDER BY ' + @sort + ' ' + @t_order + ') As temp' +
    ' INNER JOIN' + @table + ' As data ON temp.' + @id + ' = data.' + @id +
    ' ORDER BY temp.' + @id + ' ' + @order
EXEC(@sql)

解决方案 »

  1.   

    把EXEC(@sql)改为print(@sql)就 能看出问题了
      

  2.   

    过程或函数 'cpage' 需要参数 '@order',但未提供该参数。 
    它显示这个错误Dim wc, conn, rsSet conn = Server.CreateObject("Adodb.Connection")
    conn.ConnectionString = "Provider=SQLOLEDB.1;Data Source=(local);User ID=sa;Password=;Database=KC"
    conn.OpenSet wc = Server.CreateObject("Adodb.Command")wc.ActiveConnection = conn
    wc.CommandTimeout = 1200
    wc.CommandText = "cpage"
    wc.CommandType = 4wc.Parameters.Append wc.CreateParameter("@page_num", 3, 1, 8, 1)
    wc.Parameters.Append wc.CreateParameter("@page_max", 3, 1, 4, 15)
    wc.Parameters.Append wc.CreateParameter("@table", 200, 1, 50, "[KC].[dbo].[kucun]")
    wc.Parameters.Append wc.CreateParameter("@id", 200, 1, 20, "id")
    wc.Parameters.Append wc.CreateParameter("@sort", 200, 1, 20, "id")
    wc.Parameters.Append wc.CreateParameter("@order", 200, 1, 20, "DESC")
    wc.Parameters.Append wc.CreateParameter("@record_count", 3, 2)
    Set rs = wc.Execute这样调用的我
      

  3.   

    muxrwc(需时越兔) ( ) 信誉:100  2007-08-07 13:52:32  得分: 0  
     
     
       过程或函数 'cpage' 需要参数 '@order',但未提供该参数。 
    它显示这个错误Dim wc, conn, rsSet conn = Server.CreateObject("Adodb.Connection")
    conn.ConnectionString = "Provider=SQLOLEDB.1;Data Source=(local);User ID=sa;Password=;Database=KC"
    conn.OpenSet wc = Server.CreateObject("Adodb.Command")wc.ActiveConnection = conn
    wc.CommandTimeout = 1200
    wc.CommandText = "cpage"
    wc.CommandType = 4wc.Parameters.Append wc.CreateParameter("@page_num", 3, 1, 8, 1)
    wc.Parameters.Append wc.CreateParameter("@page_max", 3, 1, 4, 15)
    wc.Parameters.Append wc.CreateParameter("@table", 200, 1, 50, "[KC].[dbo].[kucun]")
    wc.Parameters.Append wc.CreateParameter("@id", 200, 1, 20, "id")
    wc.Parameters.Append wc.CreateParameter("@sort", 200, 1, 20, "id")
    wc.Parameters.Append wc.CreateParameter("@order", 200, 1, 20, "DESC")
    wc.Parameters.Append wc.CreateParameter("@record_count", 3, 2)
    Set rs = wc.Execute这样调用的我
      
     
    -----------------------有個參數沒有給值@shows varchar(800),     
      

  4.   

    另外,@where varchar(800)也沒有給值
      

  5.   

    谢谢不过还有一个问题。。
    就是EXEC(@sql)后。。
    那个@record_count就不能从外面访问了。。怎么才能重新在把它输出出来??
      

  6.   

    你應該在程序中將這個參數定義為output類型。
      

  7.   

    代码是这样的
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    ALTER PROCEDURE [dbo].[cpage] (
    @page_num int, -- 当前页数
    @page_max int, -- 每页显示条数
    @table varchar(50), -- 表名
    @id varchar(20), -- ID字段
    @shows varchar(800), -- 显示列
    @sort varchar(20), -- 排序字段(推荐用ID)
    @where varchar(800), -- 查询条件不推荐用like '%..'
    @order varchar(20), -- 排序方式
    @record_count int OUTPUT -- 记录总数
    )
    ASDECLARE @sql nvarchar(4000), @t_where varchar(800), @t_order varchar(50),
    @page_count float, @mod int, @top intIF @page_num Is Null Or @page_num < 1
    SET @page_num = 1IF @where Is Null Or LTrim(RTrim(@where)) = '' -- 设置条件
    SET @t_where = ''
    ELSE
    SET @t_where = ' WHERE ' + LTrim(RTrim(@where))IF @order = 'DESC' -- 设置排序
    SET @t_order = 'ASC'
    Else
    SET @t_order = 'DESC'SET @sql = 'SELECT @record_count = COUNT(*) FROM ' + @table + @t_whereEXEC sp_executesql @sql, N'@record_count int OUTPUT', @record_count OUTPUT -- 返回记录总数SET @page_count = @record_count / @page_max
    SET @mod = @record_count - CAst(@page_count As int) * @page_max
    SET @page_count = CEiling(@page_count)IF @page_count > @page_num Or @mod = 0 -- 设置显示页数
    SET @top = @page_max
    ELSE
    SET @top = @modSET @sql = 'SELECT temp.' + @id + ', data.' + Replace(@shows, ',', ', data.') + ' FROM (' +
    'SELECT TOP ' + CAst(@top As varchar) + ' * FROM (' +
    'SELECT TOP ' + CAst(@page_num * @page_max As varchar) + ' ' + @id +
    ' FROM ' + @table + @t_where + ' ORDER BY ' + @sort + ' ' + @order +
    ') As temp ORDER BY ' + @sort + ' ' + @t_order + ') As temp' +
    ' INNER JOIN' + @table + ' As data ON temp.' + @id + ' = data.' + @id +
    ' ORDER BY temp.' + @id + ' ' + @order
    EXEC(@sql)
      

  8.   

    Dim wc, conn, rsSet conn = Server.CreateObject("Adodb.Connection")
    conn.ConnectionString = "Provider=SQLOLEDB.1;Data Source=(local);User ID=sa;Password=;Database=KC"
    conn.OpenSet wc = Server.CreateObject("Adodb.Command")wc.ActiveConnection = conn
    wc.CommandTimeout = 1200
    wc.CommandText = "cpage"
    wc.CommandType = 4wc.Parameters.Append wc.CreateParameter("@page_num", 3, 1, 8, 1)
    wc.Parameters.Append wc.CreateParameter("@page_max", 3, 1, 4, 15)
    wc.Parameters.Append wc.CreateParameter("@table", 200, 1, 50, "[KC].[dbo].[kucun]")
    wc.Parameters.Append wc.CreateParameter("@id", 200, 1, 20, "id")
    wc.Parameters.Append wc.CreateParameter("@shows", 200, 1, 800, "*")
    wc.Parameters.Append wc.CreateParameter("@sort", 200, 1, 20, "id")
    wc.Parameters.Append wc.CreateParameter("@where", 200, 1, 800, "")
    wc.Parameters.Append wc.CreateParameter("@order", 200, 1, 20, "DESC")
    wc.Parameters.Append wc.CreateParameter("@record_count", 3, 2)
    'wc.Parameters.Append wc.CreateParameter("@page_count", 3, 2)
    Set rs = wc.ExecuteResponse.Write wc.Parameters("@record_count").Value
      

  9.   

    只要把那个EXEC(@sql)注释掉。。就可以显示出wc.Parameters("@record_count").Value