1

我在我的一个应用程序中使用以下程序

ALTER procedure [dbo].[FeeRecordSelect]
@GRNo varchar(4),
@PaymentModeId numeric(2) output
as
begin
SELECT @PaymentModeId = Students.PaymentModeId FROM Students where Students.GRNo = @GRNo
end 
GO

我的问题是:如果我没有得到 @GRNo 的结果,我想在 @PaymentModeId 中选择 1

我已经试过了

create procedure [dbo].[FeeRecordSelect10]
@GRNo varchar(4),
@PaymentModeId numeric(2) output
as
begin
SELECT @PaymentModeId = isnull(Students.PaymentModeId, 1) FROM Students where Students.GRNo = @GRNo
end 
GO
4

2 回答 2

2

IsNull() 不起作用的原因是结果集不包含任何行。

ALTER procedure [dbo].[FeeRecordSelect]  
@GRNo varchar(4),  
@PaymentModeId numeric(2) output
as  
begin  
set @PaymentModeId = isnull((select Students.PaymentModeId FROM Students where Students.GRNo = @GRNo), 1)
end   
GO 
于 2012-04-22T16:53:52.357 回答
1

@PaymentModeID只有在选择中返回至少一行时,才会设置。

Set @PaymentModeId = 1

在选择之前将默认值设置为1。现在如果没有选择行,它仍然会返回1。

编辑:

ALTER procedure [dbo].[FeeRecordSelect]
@GRNo varchar(4),
@PaymentModeId numeric(2) output
as
begin

Set @PaymentModeId = 1    

SELECT @PaymentModeId = Students.PaymentModeId FROM Students where Students.GRNo = @GRNo
end 
GO
于 2012-04-22T16:46:59.567 回答