日期:2014-05-18  浏览次数:20370 次

如何得到存储过程的输出参数?
这是返回一个表的记录总数的存储过程
如何得到记录集总数。
CREATE   procedure   recordCount
(
@strWhere   nvarchar(500)= ' '
)
as
declare   @flag   int  
declare   @sqlStr   nvarchar(1000)
set   @flag   =   0
if   @strWhere   !=   ' '
      set   @sqlStr   =   'select   count(id)   from   get_zhaoshang     where   1=1   '   +   @strWhere  
else
      set   @sqlStr   =   'select   count(id)   from   get_zhaoshang '

exec   sp_executesql   @sqlStr,N '@count   int   output ',@flag   output
GO
--------------------------------
我的asp调用:
Set   MyComm   =   Server.CreateObject( "ADODB.Command ")
MyComm.ActiveConnection   =   objconn  
'MyConStr是数据库连接字串

MyComm.CommandText   =   "recordCount "  
'指定存储过程名

MyComm.CommandType   =   4  
'表明这是一个存储过程
MyComm.Prepared   =   true  
'要求将SQL命令先行编译

'声明参数
MyComm.Parameters.append   MyComm.CreateParameter( "@strWhere ",200,1,500,SearchChar1)
MyComm.Parameters.append   MyComm.CreateParameter( "@count ",3,2)
MyComm.Execute
' '取得出参
response.Write   MyComm.Parameters( "@flag ").value

Set   MyComm   =   Nothing
报错:
Microsoft   OLE   DB   Provider   for   SQL   Server   错误   '80040e14 '  

为过程或函数   recordCount   指定的参数太多。


------解决方案--------------------
CREATE procedure recordCount
(
@strWhere nvarchar(500)= ' ',
@count int output /*增加此参数*/
)
as
declare @flag int
declare @sqlStr nvarchar(1000)
set @flag = 0 /*此变量无用*/
if @strWhere != ' ' /*修改SQL内容*/
set @sqlStr = N 'select @COUNT = count(id) from get_zhaoshang where 1=1 ' + @strWhere
else /*修改SQL内容*/
set @sqlStr = N 'select @COUNT = count(id) from get_zhaoshang '

exec sp_executesql @sqlStr,N '@count int output ',@count output
GO
--------------------------------
我的asp调用:
...
'声明参数
MyComm.Parameters.append MyComm.CreateParameter( "@strWhere ",200,1,500,SearchChar1)
MyComm.Parameters.append MyComm.CreateParameter( "@count ",3,2) '注意:要把@count参数方向声明为output
MyComm.Execute
' '取得出参 /*把@flag换成@count.*/
response.Write MyComm.Parameters( "@count ").value
...

------解决方案--------------------
N是National的所写,在SQLSERVE中用于表示UNICODE字符常量.sp_executesql 这个存储过程要求前二个参数类型必须是UNICODE类型的,所以字符串常量前必须加N前缀表示是UNICODE字符.