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操作而产生回显了,所以第一个结果集不是想要的.