create proc ...
as
set nocount on
insert...
select ...
set nocount off

解决方案 »

  1.   

    SET NOCOUNT
    使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。语法
    SET NOCOUNT { ON | OFF }注释
    当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。权限
    SET NOCOUNT 权限默认授予所有用户。示例
    下例在 osql 实用工具或 SQL Server 查询分析器中执行时,可防止显示有关受影响的行数的信息。USE pubs
    GO
    -- Display the count message.
    SELECT au_lname 
    FROM authors
    GO
    USE pubs
    GO
    -- SET NOCOUNT to ON and no longer display the count message.
    SET NOCOUNT ON
    GO
    SELECT au_lname 
    FROM authors
    GO
    -- Reset SET NOCOUNT to OFF.
    SET NOCOUNT OFF
    GO
      

  2.   

    我前台用的是Delphi,一直以来都用很多这样的存储过程,
    不过中间多少个Insert,但保证最后一句是select就肯定可以返回记录的
    我想你是在select后还有其他代码,或者在select之前就有其他select或者提早return了。最好贴出你的存储过程代码。
      

  3.   

    在存储过程的开始部分加上set nocount on ,结束部分加上set nocount off就行了:--例:
    create proc p_test
    as
    set nocount on
    你的存储过程处理语句
    set nocount off
    go
      

  4.   

    我来帮你.
    我在一次指导学生演练时,发现了上述问题.不过我用的是VB.
    如果你的表经过了修改,返回记录集就出错.不作修改,就不出错.是这样的吧.
    你的ado连接代码有误.
    provider(提供者)=sqloledb.1,会出现上述问题.
    该为:provider(提供者)={sql server}.上述问题就消失了.VB 中是这样的.你试试.有问题再来.
      

  5.   

    SET NOCOUNT
    使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。语法
    SET NOCOUNT { ON | OFF }注释
    当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。权限
    SET NOCOUNT 权限默认授予所有用户。示例
    下例在 osql 实用工具或 SQL Server 查询分析器中执行时,可防止显示有关受影响的行数的信息。USE pubs
    GO
    -- Display the count message.
    SELECT au_lname 
    FROM authors
    GO
    USE pubs
    GO
    -- SET NOCOUNT to ON and no longer display the count message.
    SET NOCOUNT ON
    GO
    SELECT au_lname 
    FROM authors
    GO
    -- Reset SET NOCOUNT to OFF.
    SET NOCOUNT OFF
    GO
      

  6.   

    因为你中间使用了临时表
    在存储过程执行结束的时候已经没有该表
    所以你返回不了结果集
    如果要是在存储过程中想返回结果,用全局临时表把##tablename
      

  7.   

    刚做了个例子
    create procedure whtest1 as 
    select 'sdfds' as a into #yyy
    select * from  #yyy
    drop table #yyy
    然后在程序里调用放到datagrid里,没问题
    是不是你的连接的游标类型的问题,server/client
      

  8.   

    呵呵,说法还真多!!!其实马可的就行!!create proc ...
    as
    set nocount on
    insert...
    select ...
    set nocount off
      

  9.   

    在VC数据库板块问了半天没人告诉我。这么多答案,好像小儿科似的,^_^。刚才我怎么没搜索到,呵呵,谢谢大家,我先来试试看。
    yujohny(踏网无痕):程序代码应该没问题,我执行其他不带Insert的存储过程都能成功,可能Delphi和VC用ADO方式执行存储过程机制不一样。
    adinna(想写程序) :不是临时表的问题,我注释掉Insert部分就能用了。
    1ssp(新来的): 是存储过程部分的原因,程序执行其他存储过程能成功。
      

  10.   

    一句话,就是:
    set nocount on的问题,你加上就没事了.因为insert语句会产生影响行数的信息.所以影响了你程序的调用.
    加上:
    set nocount on
    就可以关闭这个信息,相当于注释掉insert语句
      

  11.   

    一句话,就是:
    set nocount on的问题,你加上就没事了.