1.在存储过程的开始加入SET NOCOUNT ON;
2.禁用存储过程中的PRINT;
3.查看存储过程中是不是使用了多个SELECT返回结果集.如果是则返回给客户端的只是第一个SELECT的结果集,这与在查询分析器中的表现不同(查询分析器一次显示所有结果集).如果是这样,必须使用客户端ADO.RECORDSET.NEXTRECORD()方法逐个显示结果集.
4.最好把代码贴出来,让大家有的放矢.
2.禁用存储过程中的PRINT;
3.查看存储过程中是不是使用了多个SELECT返回结果集.如果是则返回给客户端的只是第一个SELECT的结果集,这与在查询分析器中的表现不同(查询分析器一次显示所有结果集).如果是这样,必须使用客户端ADO.RECORDSET.NEXTRECORD()方法逐个显示结果集.
4.最好把代码贴出来,让大家有的放矢.
解决方案 »
- 请教:存储过程对象名 'dbo.dt_test' 无效
- 怎样在SQL的一个查询中增加一个序列号
- 求助一个多表汇总的问题
- 内存不足,死锁 , 错误: 701,严重性: 17,状态: 123
- 我的sql server服务器启动不了,能帮我解决吗?
- 请大家帮我优化这条SQl语句
- 简单问题,怎样修改服务器名(LOCAL改成ABLE)?非常感谢!!!!
- Access做网络数据库应用可不可以?要考虑哪些问题?
- 求一个比较复杂的SQL,请大家!!!!!!!大师!!!!们进来看看,帮帮忙,在此谢了!!!??????????????????
- 求效率最高的sql-server查询实现方法
- 怎样取过程返回的一个数据集?
- 头疼
改好了,用12个数据测试发现没有问题了。多谢hellowork(一两清风) 。正在组织更大量数据测试。
----------------------------------------------------------------------
数据量大时的这种情况与你在第二个存储过程中调用的其它存储过程有关.当数据量大的时候,这些测试数据可能会因符合某些条件而被调用的存储过程处理并返回结果集.
请楼主将第二个存储过程中调用的所有存储过程的开始加入set nocount on 并且禁用print,再对被调用的存储过程返回的结果集进行处理,例如保存到临时表中或保存到变量中等等,就是保证被调用的存储过程不要返回结果集或回显.
问题找到了真正的原因。与返回结果集合关系有一定,但关系不大。应该是查询分析器和vc调用存储过程的时候,sql server用不同的兼容性来运行。
在查询分析器中,当某个为null的值,我没有判别其是否is null, 而是直接判断是否 >0,它进行了容错处理。 而当vc调用存储过程执行这段代码的时候,它就进行了严格检查。所以,二者的结果不一样。最后,把这些语句都改写成为严格符合sql 语义标准的语句,运行结果就都一样了。