读书人

请问ASP与存储过程有关问题

发布时间: 2012-03-13 11:21:11 作者: rapoo

请教ASP与存储过程问题
正常T-SQL语句select * from table order by code asc(数据在万条以上 SQLSERVER2000)
问题1:如何使用存储过程输出查找结果
问题2:如何实现分页功能
问题3: 存储过程真的要比普通的SQL语句站用资源小吗 还是已经把压力都转给数据库了 谢谢各位!

[解决办法]
1.如果只是这样一句sql,写不写SP都一样。问题是不要一次把那么多数据取出来。
3.确实SP在数据库端完成。
分页参考
CREATE PROCEDURE sp_paging
(
@strTblNameVARCHAR(100),--表名或视图表
@strFieldsVARCHAR(4000)= '* ',--欲选择字段列表
@strOrdFieldVARCHAR(100),--排序字段
@strKeyFieldVARCHAR(100),--主键
@intPageNoINT= 0,--页号,从0开始
@intPageSizeINT= 10,--页尺寸
@strWhereVARCHAR(4000)= ' ',--条件
@bitOrdTypeBIT= 1--排序,1=降序,0=升序
)
AS
SET NOCOUNT ON
DECLARE @strSQL VARCHAR(6000)

IF @intPageNo = 0
BEGIN
SET @strSQL= 'SELECT TOP ' + CAST(@intPageSize AS VARCHAR) + ' ' + @strFields + ' FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere
IF @bitOrdType = 1
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' DESC '
ELSE
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' ASC '
END
ELSE
BEGIN
SET @strSQL= 'DECLARE @intCurPageNo int; '
SET @strSQL= @strSQL + 'DECLARE @intNextPageNo int; '
SET @strSQL= @strSQL + 'SET @intCurPageNo = ' + CAST(@intPageNo AS VARCHAR) + '* ' + CAST(@intPageSize AS VARCHAR) + '; '
SET @strSQL= @strSQL + 'SET @intNextPageNo = ' + CAST(@intPageNo+1 AS VARCHAR) + '* ' + CAST(@intPageSize AS VARCHAR) + '; '
SET @strSQL= @strSQL + 'DECLARE @strSQL VARCHAR(6000); '
IF @bitOrdType = 1
BEGIN
SET @strSQL= @strSQL + 'SET @strSQL = ' 'SELECT ' + @strFields + ' FROM (SELECT TOP ' ' + CAST(@intNextPageNo AS VARCHAR) + ' ' * FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' DESC) AS atmp WHERE ' + @strKeyField
+ ' NOT IN (SELECT TOP ' ' + CAST(@intCurPageNo AS VARCHAR) + ' ' ' + @strKeyField + ' FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' DESC) ORDER BY ' + @strOrdField + ' DESC ' '; '
END
ELSE
BEGIN
SET @strSQL= @strSQL + 'SET @strSQL = ' 'SELECT ' + @strFields + ' FROM (SELECT TOP ' ' + CAST(@intNextPageNo AS VARCHAR) + ' ' * FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' ASC ) AS atmp WHERE ' + @strKeyField
+ ' NOT IN (SELECT TOP ' ' + CAST(@intCurPageNo AS VARCHAR) + ' ' ' + @strKeyField + ' FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere
SET @strSQL= @strSQL + ' ORDER BY ' + @strOrdField + ' ASC) ORDER BY ' + @strOrdField + ' ASC ' '; '
END
SET @strSQL=@strSQL + 'EXECUTE(@strSQL); '
END
print @strSQL
EXECUTE(@strSQL)

SET @strSQL= 'SELECT COUNT(*) FROM ' + @strTblName
IF @strWhere != ' '
SET @strSQL= @strSQL + ' WHERE ' + @strWhere



EXECUTE(@strSQL)

SET NOCOUNT OFF
GO

读书人网 >ASP

热点推荐