VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1275|回复: 10

存储过程输出参数问题 为什么输出的老是NULL值 ?

[复制链接]

3

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-2-6 01:30:01 | 显示全部楼层 |阅读模式
存储过程代码如下:
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值呢?
回复

使用道具 举报

0

主题

49

帖子

35.00

积分

新手上路

Rank: 1

积分
35.00
发表于 2020-3-24 18:45:01 | 显示全部楼层
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


--这样试试?
回复

使用道具 举报

0

主题

88

帖子

55.00

积分

新手上路

Rank: 1

积分
55.00
发表于 2020-3-24 19:00:01 | 显示全部楼层
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
回复

使用道具 举报

3

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-3-26 11:45:01 | 显示全部楼层
没用哦,给了初值,执行跟踪出来的还是这样
declare @P1 nvarchar(30)
set @P1=NULL
exec sp_executesql N'UP_Production_Authenticate', N'@sOrdNo nvarchar(100),@sSubOrdNo nvarchar(100),@sStaff nvarchar(100),@sResult nvarchar(30) output', @sOrdNo = N'9042', @sSubOrdNo = N'14-002', @sStaff = N'lily', @sResult = @P1 output
select @P1


我另外有一个存储过程
CREATE PROCEDURE UP_frmMessage_Read
@sStaff nvarchar(10),
@sResult nvarchar(10) output
AS
  select iXh,sNo,sReceipt,sMessage,sSender,dNow from tblMessage where sReceipt=@sStaff and sStatus<>3
if @@rowcount=0
set @sResult='No'
else
set @sResult='Yes'

跟踪出来的就是

declare @P1 nvarchar(10)
set @P1=N'No'
exec UP_frmMessage_Read @sStaff = N'lily', @sResult = @P1 output
select @P1

这个也没有给初值啊,为什么出来的就是set @P1=N'No',不是NULL值
回复

使用道具 举报

0

主题

28

帖子

25.00

积分

新手上路

Rank: 1

积分
25.00
发表于 2020-3-28 15:30:01 | 显示全部楼层
执行的时候这样写看看
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

回复

使用道具 举报

3

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-3-28 22:45:01 | 显示全部楼层
楼上的什么意思?没看明白
回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-3-30 13:30:01 | 显示全部楼层
declare @p1  varchar(1024)
SELECT @p1=''
exec UP_Production_Authenticate N'9042',@p1 output
select @p1

可能是调用方法有问题,这样调用看看
回复

使用道具 举报

0

主题

40

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-3-30 18:00:01 | 显示全部楼层
CREATE PROCEDURE UP_Production_Authenticate
@sOrdNo nvarchar(100),
@sResult nvarchar(30) output
AS
if not exists(select * from tblContract where sOrdNo=@sOrdNo)
set @sResult='yes'

else
set @sResult='no'

return
回复

使用道具 举报

3

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-4-1 02:00:01 | 显示全部楼层
wgfxman: 你可能理解错了,那段不是调用的代码,是跟踪出来的代码,调用就是直接调用的存储过程.

hiqwolfzzh:那个Begin..end 也可以加的,不加也是一样的效果.我试了.
回复

使用道具 举报

0

主题

9

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-4-1 12:15:02 | 显示全部楼层
代码是正确的.如果返回的是NULL,只可能是你调用有错或那个if根本就没执行.
实际情况.仔细找找你实际的存储过程.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表