日期:2014-05-18  浏览次数:20416 次

存储过程输出参数问题 为什么输出的老是NULL值 ?
存储过程代码如下:
CREATE   PROCEDURE   UP_Production_Authenticate
@sOrdNo   nvarchar(100),
@sResult   nvarchar(30)   output
AS
if   not   exists(select   *   from   tblContract   where   sOrdNo=@sOrdNo)
begin
set   @sResult= 'yes '
end
else
begin  
set   @sResult= 'no '
end
return

执行过后得出@sResult值不管怎样都是NULL值,用跟踪器跟踪的代码为:
declare   @P1   bit
set   @P1=NULL
exec   sp_executesql   N 'UP_Production_Authenticate ',   N '@sOrdNo   nvarchar(100),@sResult   bit   output ',   @sOrdNo   =   N '9042 ',   @sResult   =   @P1   output
select   @P1

为什么系统会自动给@P1赋个NULL值呢?

------解决方案--------------------
CREATE PROCEDURE UP_Production_Authenticate
@sOrdNo nvarchar(100),
@sResult nvarchar(30) output
AS
set @sResult = ' ' --- 先给个初始值
if not exists(select * from tblContract where sOrdNo=@sOrdNo)
begin
set @sResult= 'yes '
end
else
begin
set @sResult= 'no '
end
return
------解决方案--------------------
执行的时候这样写看看
declare @P1 nvarchar(30)
set @P1=NULL
exec sp_executesql N 'UP_Production_Authenticate ', N '@sOrdNo nvarchar(100),@sResult nvarchar(30) output ', @sOrdNo = N '9042 ', @sResult = @P1 output
select @P1


------解决方案--------------------
代码是正确的.如果返回的是NULL,只可能是你调用有错或那个if根本就没执行.
实际情况.仔细找找你实际的存储过程.
------解决方案--------------------
存储过程没有问题,不加return 也不会反回NUll 应该还是程序调用的有问题。