Вам нужно включить Set NoCount On;
в начале вашей хранимой процедуры.Вероятно, проблема заключается в том, что что-то вызывает возврат списка затронутых строк, и это отбрасывает классический ADO, и он считает, что затронутые строки - это первый набор записей.
Если проблема заключается в получении точного значения свойства RecordCount в RecordSet, то тип используемого курсора имеет значение.В вашем примере вы используете статический курсор, передавая «3» в метод Open.Используя статический курсор, вам нужно вызвать MoveLast, прежде чем RecordCount будет точным.
Const adOpenForwardOnly = 0
Const adOpenStatic = 3
Dim sql
Dim rs
' btw, you should validate your inputs here
sql = "Exec sp_SalesTaxV3 '" & user_zip & "'"
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open sql, tax_db, adOpenStatic
rs.MoveLast
rs.MoveFirst 'not needed if you are not going to cycle through the rows
'Now RecordSet will be accurate
Response.Write( "<br />RecordCount: " & rs.RecordCount )
Set rs = Nothing
Кстати, другое решение состоит в том, чтобы просто возвращать счетчик строк в виде столбца в выходных данных (или просто счетчик, если вы не собираетесь использовать ни одну из возвращенных строк).*