Reading a recordset from a stored procedure is easy, essentially we just treat the procedure statement as the SQL statement, for example, something like:
sqlStr="USP_MyProc 1,2,3" set rs=Server.CreateObject("adodb.Recordset") rs.cursorlocation=aduseclient rs.cachesize=1 rs.open sqlStr, conn, adOpenForwardOnly,adLockReadOnly
But how about reading more than one recordset from a procedure? Perhaps you have a circumstance where you need a couple of resultsets within the same code block. You could have more than one procedure and open each recordset in turn (or perhaps use the same procedure and control which resultset is returned using the procedure’s parameters).
Instead why not return all the required recordists from the one procedure using the one call to the database? It can be done, a procedure can return multiple recordists and each can be read in turn from your ASP code.
The trick is NextRecordset. You may already have been using this without quite realising, for example, when inserting a new record to the database that results in a unique identity value, we usually have a need to grab that value, so we’d do something like this:
sqlStr="INSERT INTO tblMyTable (myField) VALUES (myValue);" Set rs = conn.execute (sqlStr & "select SCOPE_IDENTITY()").nextrecordset
If you look carefully you’ll see we’re actually running two queries, first the insert, and then a second to grab the identity. You can do the same with a procedure and multiple recordists. For example, let’s say you have a procedure that returns two recordists, you just cycle through them with NextRecordset:
sqlStr="USP_MyProc 1,2,3" set rs=Server.CreateObject("adodb.Recordset") rs.cursorlocation=aduseclient rs.cachesize=1 rs.open sqlStr, conn, adOpenForwardOnly,adLockReadOnly set rs2 = rs.NextRecordSet
Now you have the first results in rs and the second batch of results in rs2.