table变量 存储过程返回数据
CREATE   PROCEDURE   sp_getAllMT 
 AS 
 declare   @tbl   table( 
 	mtid   int, 
 	mtname   varchar(50), 
 	orderid   int 
 ) 
 insert   into   @tbl   values(0, '供应 ',0) 
 insert   into   @tbl   select   mtid,mtname,orderid   from   tbl_messagetype   where   mtid <50   order   by   orderid   asc 
 insert   into   @tbl   values(0, '求购 ',50) 
 insert   into   @tbl   select   mtid,mtname,orderid   from   tbl_messagetype   where   mtid> 50   order   by   orderid   asc 
 select   *   from   @tbl 
 GO 
 -------------------------------- 
 CREATE   PROCEDURE   sp_getAllMT 
 AS 
 select   mtid,mtname,orderid   from   tbl_messagetype      order   by   orderid   asc 
 GO 
 ---------------------------------- 
 上面的两个存储过程返回的结果有什么不同? 
 我在程序中用set   rs   =   conn.execute( "sp_getAllMT ")用第二个是正确的,第一个错误,提示 "对象关闭时,不允许操作。 ",在查询分析器中两个存储过程都可以执行,返回预期的结果
------解决方案--------------------在第一个存储过程的定义的第一行加入set nocount on,以禁止回显: 
 CREATE PROCEDURE sp_getAllMT 
 AS 
 SET NOCOUNT ON     /*加上此行*/ 
 delcare ...
------解决方案--------------------第二个也有回显,但是该回显是在返回的结果中的第二个结果集中,而查询的记录在第一个结果集中,所以该回显不会影响读取结果集. 
 第一个存储过程中的在查询之前就因为有insert操作而产生回显了,所以第一个结果集不是想要的.