前些天,阿里西西web团队(Alixixi.com)在开发一个系统平台时,需要通过存储过程调用多个表的几个字段,合并到一个临时表中,并进行排序返回给ASP调用。
下面,我把经验分享出来:
1、存储过程部分:
以下是存储过程部分:
CREATE PROCEDURE [dbo].[alixixi]
sNum int,
sOrder varchar(20)
AS
SET nocount on
create table #btable (id int,channelid int,classid int,title varchar(250),imageurl varchar(250),htmlfiledate varchar(250),addtime datetime)
execute(’insert into #btable select top ’+sNum+’ id,fid,cid,title,imageurl,myurl,writetime from ali_tb1 where isbest=1’)
execute(’insert into #btable select top ’+sNum+’ id,fid,cid,topic,photourl,siteurl,addtime from ali_tb2 where isbest=1’)
execute(’select * from #btable order by ’+sOrder+’ desc’)
GO
这个存储过程的作用是建立一个名为alixixi的存储过程,并带有两个参数sNum及sOrder,作用是可以灵活的通过参数控制显示返回的记录数和排序方法。
在MSSQL查询分析器里,我们可以通过这样的形式执行存储过程来返回两个表各5条记录(一共10条):
exec alixixi 5,’addtime’ |
下面,我们说说在ASP中调用的方法(Conn为数据库连接,请检查你的环境,相关数据库连接代码这里不列出)。
以下是引用片段: dim cmd Set Rs =Server.CreateObject("ADODB.Recordset") Set Cmd = Server.CreateObject("ADODB.Command") Set Cmd.ActiveConnection=Conn Cmd.CommandText="alixixi" Cmd.Parameters.append Cmd.CreateParameter("sNum",3,1,4,50) Cmd.Parameters.append Cmd.CreateParameter("sOrder",200,1,20,"addtime") Cmd.CommandType=4 Set Rs=Cmd.Execute Set Cmd = Nothing If Not Rs.EOF Then do while not rs.eof response.write rs(0) & " " rs.movenext loop Else Response.write "无记录" End If Set Rs=Nothing |
通过以上方法,我们就可以实现ASP调用带参数的MSSQL存储过程,并返回临时表记录集。