Rac*_*hel 0 null sql-server t-sql
我遇到了这个存储过程的问题。当用户选择“是”时,它应该按照它在“是”的 if 语句中所说的那样做,但它什么也不做,也不向数据库中插入任何内容。它适用于“否”条件。你能告诉我什么不起作用吗?
ALTER PROCEDURE [dbo].[sp_ff_Insert_ProjectApproved]
(
@project_no varchar(6)
,@sequence_no int
,@grant_programme varchar(2)
,@jobs_approved int
,@grant_amount int
,@Committee varchar(4)
,@Meeting_no int
,@Minute_Item int
,@jobs_maintained int
,@approval_date date
,@approval_by int
,@comments varchar(1600)
,@created_by int
,@created_date datetime
,@updated_by int
,@updated_date datetime
,@approval varchar(5)
,@ratify varchar(3)
--,@research_type varchar(1)='T'
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
DECLARE @ReturnValue int,
@post_approval_status varchar(3),
@approval_status varchar(3),
@current_status varchar(3)
set @current_status = ( SELECT approval_status from approval_master_tbl
WHERE project_no = @project_no
AND sequence_no = @sequence_no -1)
if @approval = 'No' and @sequence_no = 1
begin
set @Approval_Status = 'DRA'
set @post_approval_status = NULL
end
else if @approval = 'No' and @sequence_no > 1
begin
set @Approval_Status = 'DRA'
set @post_approval_status = ''
end
else if @approval = 'Yes' and @sequence_no > 1 and @current_status = 'DRA'
begin
set @Approval_Status = 'APP'
set @post_approval_status = ''
end
--ISSUE IS HERE!!!!
else if @approval = Null and @sequence_no > 1 and @current_status = 'DRA'
begin
set @Approval_Status = 'APP'
set @post_approval_status = ''
end
else if @approval = 'No' and @sequence_no > 1 and @current_status = 'APP'
begin
set @Approval_Status = 'APP'
set @post_approval_status = ''
end
else if @ratify = 'YES' and @sequence_no > 1 and @current_status = 'APP'
begin
set @Approval_Status = 'APP'
set @post_approval_status = 'ARF'
end
else if @approval = 'No' and @sequence_no > 1 and @current_status = 'APP' AND @post_approval_status = 'ARF'
begin
set @Approval_Status = 'HIS'
set @post_approval_status = 'ARF'
end
else if @approval = 'YES' and @sequence_no > 1 and @current_status = 'HIS'
begin
set @Approval_Status = 'HIS'
set @post_approval_status = ''
end
else if @ratify = 'YES' and @sequence_no > 1 and @current_status = 'HIS'
begin
set @Approval_Status = 'APP'
set @post_approval_status = 'ARF'
end
SET NOCOUNT ON
BEGIN TRANSACTION
INSERT INTO [dbo].[approval_master_tbl]
([project_no]
,[sequence_no]
,[grant_programme]
,[jobs_approved]
,[approval_status]
,[committee]
,[meeting_no]
,[minute_item]
,[jobs_maintained]
,[comments]
,[approval_date]
,[approved_by]
,[post_approval_status]
,[create_date]
,[create_by]
,[update_date]
,[update_by]
)
VALUES(
@project_no
,@sequence_no
,@grant_programme
,@jobs_approved
,@approval_status
,@committee
,@meeting_no
,@minute_item
,@jobs_maintained
,@comments
,@approval_date
,@approval_by
,@post_approval_status
,@created_date
,@created_by
,@updated_date
,@updated_by)
--Update previous Approval status
IF @sequence_no > 1
UPDATE approval_master_tbl
SET approval_status = @post_approval_status
WHERE project_no = @project_no
AND sequence_no = @sequence_no - 1
--Update Project Status in project Table
if @approval = 'YES'
UPDATE PROJECT_TBL
SET PROJECT_STATUS = 'YET'
,DATE_FIRST_APPROVED = @approval_date
,actual_jobs_approved = @jobs_approved
,actual_amt_approved = @grant_amount
WHERE PROJECT_TBL.project_no = @project_no
COMMIT TRAN
SET @ReturnValue = 0
END TRY
BEGIN CATCH
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
DECLARE @ErrorMessage NVARCHAR(4000)=ERROR_MESSAGE()
DECLARE @ErrorSeverity INT = ERROR_SEVERITY()
DECLARE @ErrorState INT = ERROR_STATE()
RAISERROR (@ErrorMessage,
@ErrorSeverity,
@ErrorState
);
SET @ReturnValue = 1
SET @ErrorMessage=ERROR_MESSAGE();
SELECT ERROR_MESSAGE() as ErrorMessage;
END
END CATCH
RETURN @ReturnValue
END
Run Code Online (Sandbox Code Playgroud)
这个
@approval = Null
Run Code Online (Sandbox Code Playgroud)
从不评估为 TRUE,它评估为 UNKNOWN。请参阅NULL 和 UNKNOWN。
应该
@approval is Null
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
52 次 |
最近记录: |