存储过程的output参数问题

flyelfsky 2003-09-13 04:08:17
下面是一段简单的存储过程
CREATE PROCEDURE usp_oprlog_query
@lRecordCount INTEGER OUTPUT
AS
SET @lRecordCount = 200
SELECT * FROM TableName
GO
在vc使用odbc api执行该存储过程,可是就是不能得到输出参数的值
如果把SELECT * FROM TableName这句去掉,则可以正确得到,为什么?
该如何解决这个冲突?
...全文
134 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
txlicenhe 2003-09-20
  • 打赏
  • 举报
回复
前台调用时的SQL语句应为:

"declare @a integer exec usp_oprlog_query @a output Select @a "
flyelfsky 2003-09-17
  • 打赏
  • 举报
回复
谢谢各位兄弟,在一段帮助里面找到这句话:用于SQL Server的Microsoft OLE DB提供程序或SQL Server ODBC驱动程序回返回代码和输出参数值防止在绑定的变量中(存储过程),在返回给客户端的最后一个数据包中,Microsoft SQL Server返回输出参数和返回代码。因此,只有在应用程序处理或取消存储过程所返回的所有结果集后,才可以访问返回代码和输出参数值。

按照这段说法,在我的存储过程中返回的时候,得到的结果集还没有处理完,所以不能得到输出参数。这是不是sql server的一个不合理的地方呢?
hatedeadlock 2003-09-14
  • 打赏
  • 举报
回复
create proc p
@i int output
as
select @i=100

return @i
aierong 2003-09-14
  • 打赏
  • 举报
回复



create proc proc__
@n int output,@nn varchar(100)
as
select @n=100
select a.name
from syscolumns a join sysobjects b on a.id=b.id and b.name=@nn


declare @n int
exec proc__ @n output,'jobs'
print convert(nvarchar(1000),@n)
flyelfsky 2003-09-13
  • 打赏
  • 举报
回复
zjcxc(邹建) :能给一段这样的代码吗?
我的email:flyelf@163.com
zjcxc 元老 2003-09-13
  • 打赏
  • 举报
回复
VC代码的问题
yujohny 2003-09-13
  • 打赏
  • 举报
回复
你先在查询分析器里面测试一下存储过程的返回值是否正确
这样就可以判断是存储过程的问题,还是前台VC的问题
flyelfsky 2003-09-13
  • 打赏
  • 举报
回复
楼上的兄弟,我确实是这么写的,我把我的vc代码贴出来,是不是我的vc代码有问题
DWORD dwRecordCount(0);
SDWORD sqlParamLen = 0;
::SQLBindParameter(hStmt, 1, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_INTEGER, sizeof(DWORD), 0, &dwRecordCount, sizeof(DWORD), &sqlParamLen);
yujohny 2003-09-13
  • 打赏
  • 举报
回复
CREATE PROCEDURE usp_oprlog_query
@lRecordCount INTEGER OUTPUT
AS
SELECT * FROM TableName
SET @lRecordCount = @@ROWCOUNT

GO
flyelfsky 2003-09-13
  • 打赏
  • 举报
回复
按照各位的做法,可是我还是没有得到这个值
其实我的本意是想得到查询得到的记录数量,即
SET @lRecordCount = @@ROWCOUNT
我在查询分析器中确实看到@lRecordCount得到了正确的值,但是在vc中调用的时候,就是得不到正确的值
zjcxc 元老 2003-09-13
  • 打赏
  • 举报
回复
存储过程返回最后一个值:

CREATE PROCEDURE usp_oprlog_query
@lRecordCount INTEGER OUTPUT
AS
SELECT * FROM TableName
SET @lRecordCount = 200
GO
yujohny 2003-09-13
  • 打赏
  • 举报
回复
CREATE PROCEDURE usp_oprlog_query
@lRecordCount INTEGER OUTPUT
AS
DECLARE @I INT
SET @I=200
SELECT * FROM TableName
SET @lRecordCount = @I

GO
yujohny 2003-09-13
  • 打赏
  • 举报
回复
你必须在存储过程最后的一句赋@lRecordCount的值
要不存储过程返回的就是SELECT * FROM TableName的数据记录了。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧