目的:为了验证一个存储过程中是否含有某个字符串,下面查找'openrowset"这字符串。
CREATE TABLE #tmp
(
database_name varchar(255)
)
insert into #tmp 
exec sp_helptext down_sjzd_dsf --存储过程名
DECLARE Freespace CURSOR
FOR 
SELECT database_name 
FROM #tmp
OPEN Freespace
declare @strtemp varchar(255)
declare @t int
select @t=0
FETCH NEXT FROM Freespace into @strtemp
WHILE @@FETCH_STATUS=0
BEGIN
select @t=@t+charindex('openrowset',@strtemp)
FETCH NEXT FROM Freespace into @strtemp
END
CLOSE Freespace
DEALLOCATE Freespace
DROP TABLE #tmp
select @t --显示字符串数量,没有为0,否则为其它
go查询分析器的结果是正常的,可用VC+ado实现确产生错误。在查询分析器中显示为记录0(网格页,值正确),
消息页为
(所影响的行数为 3 行) --insert into #tmp 时产生的
(所影响的行数为 1 行) --select @t 时产生用Ado连接对象直接执行上面脚本,返回recordset记录集,可未能取到数据,
m_pRecord=m_pConnth->Execute((LPCSTR)strtemp,&RecordsAffected,adCmdText);
其中recordsaffected 为3,有什么办法取到 select @t产生的数据?或者有什么好的办法达到类似的目的。

解决方案 »

  1.   

    命令类型由adCmdText改为adCmdStoredProc
    测试RecordsAffected是否为0。如果为0那你就不要继续。
    从记录中取某个字段值是使用序号不要使用字段名
      

  2.   

    哈哈,不是存储过程,而直接运行脚本,问题出来脚本里,
    因为返回了两次记录集,实际只能获取第一次的记录集,
    加上set nocount on ...脚本.....set nocount off  select @t go
    这样返回最后的记录集了,insert产生的记录集就不返回了.