1

私のアプリケーションの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 は、選択によって返される行が少なくとも 1 つある場合にのみ設定されます。

置く

Set @PaymentModeId = 1

select の前にデフォルト値を 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 に答える