1.在存储过程的开始加入SET NOCOUNT ON;
2.禁用存储过程中的PRINT;
3.查看存储过程中是不是使用了多个SELECT返回结果集.如果是则返回给客户端的只是第一个SELECT的结果集,这与在查询分析器中的表现不同(查询分析器一次显示所有结果集).如果是这样,必须使用客户端ADO.RECORDSET.NEXTRECORD()方法逐个显示结果集.
4.最好把代码贴出来,让大家有的放矢.

解决方案 »

  1.   

    3)存储过程2, 既没有输入参数,也没有用SELECT返回结果集,本身接口是最少的。(当时觉得没有参数输入输出会方便一些,但还是出现了调用问题)。
      

  2.   


    改好了,用12个数据测试发现没有问题了。多谢hellowork(一两清风) 。正在组织更大量数据测试。
      

  3.   

    但数据量一大,问题又重复出现了。
    ----------------------------------------------------------------------
    数据量大时的这种情况与你在第二个存储过程中调用的其它存储过程有关.当数据量大的时候,这些测试数据可能会因符合某些条件而被调用的存储过程处理并返回结果集.
    请楼主将第二个存储过程中调用的所有存储过程的开始加入set nocount on 并且禁用print,再对被调用的存储过程返回的结果集进行处理,例如保存到临时表中或保存到变量中等等,就是保证被调用的存储过程不要返回结果集或回显.
      

  4.   


    问题找到了真正的原因。与返回结果集合关系有一定,但关系不大。应该是查询分析器和vc调用存储过程的时候,sql server用不同的兼容性来运行。
    在查询分析器中,当某个为null的值,我没有判别其是否is null, 而是直接判断是否 >0,它进行了容错处理。 而当vc调用存储过程执行这段代码的时候,它就进行了严格检查。所以,二者的结果不一样。最后,把这些语句都改写成为严格符合sql 语义标准的语句,运行结果就都一样了。