begin tran jk_tran
begin
insert into INFO values ('888')
--select * from INFO
end
if @@rowcount>0
begin
commit tran jk_tran
set @P_ERRMSG ='成功'
set @P_ID='SB'
set @P_MZHAO0='SBSB'
end
error:
if @@ROWCOUNT=0
begin
rollback tran jk_tran
set @P_ERRMSG ='失败'
end 这个存储过程,我用SQL server客户端直接执行,可以取出P_ERRMSG的值。但是用ODBC不行。
我执行存储过程方法如下:
declare @ERRMSG varchar(88)
exec proc_exec 0,@ERRMSG output
select @ERRMSG as MSGINFO用ODBC获取不到值,请问存储过程的查询函数应该怎么写?

解决方案 »

  1.   

    程序通过odbc 连数据库
    依次执行这三句?declare @ERRMSG varchar(88)
    exec proc_exec 0,@ERRMSG output
    select @ERRMSG as MSGINFO
      

  2.   

    对的,直接在SQL server客户端上执行可以获取,用ODBC链接数据库,获取不到返回值
      

  3.   

    我怀疑你的程序不能把多个sql命令一起执行。其实他们是分别执行的。
    比如这样:
    $sql="declare @ERRMSG varchar(88)";
    query($sql);
    $sql="exec proc_exec 0,@ERRMSG output";
    query($sql);
    $sql="select @ERRMSG as MSGINFO";
    query($sql);
      

  4.   

    retcode   =SQLExecDirect(hstmt1, (SQLCHAR *)"declare @i int exec getGuideSpaceCount 1,1,@i output select @i",SQL_NTS);  
    我用上面的方法成功了。。(是我代码里的 多条语句合并成一条)declare @ERRMSG varchar(88)
    exec proc_exec 0,@ERRMSG output
    select @ERRMSG as MSGINFO
    你的这个这样应该一样
    retcode   =SQLExecDirect(hstmt1, (SQLCHAR *)"declare @ERRMSG varchar(88) exec proc_exec 0,@ERRMSG output select @ERRMSG as MSGINFO",SQL_NTS);