我有一个程序,我需要实现tcl以避免表中不需要的更新。 如果条件匹配,我试图返回值1否则如果条件不匹配我将返回0但是即使条件满足也无法返回1
程序
begin
if(value1= value2)
begin transaction
------
------
------
Commit Transaction
Return
set @result=1
select @result
End
Else
begin
set @result=0
select @result
end
End
此过程仅返回@ result = 0。
更新
Create procedure [dbo].[oc_AofA_Update_WO7965&WO7951_test]
@aoa_DateStamped smalldatetime = null,
@aoa_DateSent smalldatetime = null,
@aoa_Scanned bit = null,
@accval_LastUpdatetime varchar(100) = null,
@accval_LastUpdateError int output
as
set nocount on
declare @Retrivedate varchar(100)
declare @NewRetrivedate varchar(100)
BEGIN
If(@accval_LastUpdatetime=@NewRetrivedate)
Begin
BEGIN TRANSACTION
CREATE TABLE #tmp(remarks ntext)
INSERT INTO #tmp(remarks) SELECT aoa_Remarks FROM TBL_APPOINTMENTOFAGENT WHERE aoa_AccountID = @aoa_AccountID
DECLARE @maxlength_oldval int
DECLARE @maxlength_newval int
SET @maxlength_oldval = (SELECT DATALENGTH(remarks) FROM #tmp)
if cast(@aoa_DateStamped as varchar) = ''
BEGIN
IF @@ERROR !=0
BEGIN
ROLLBACK TRANSACTION
RETURN
END
set @accval_LastUpdateError=1
select @accval_LastUpdateError as accval_LastUpdateError1
END
ELSE
UPDATE TBL_CLIENTS
SET
client_AuthorizationCode=@accval_LastUpdateError
WHERE client_ClientID=@aoa_Scanned
IF @@ERROR !=0
BEGIN
ROLLBACK TRANSACTION
RETURN
END
COMMIT TRANSACTION
RETURN
END
set @accval_LastUpdateError=1
select @accval_LastUpdateError as accval_LastUpdateError1
End
END
答案 0 :(得分:1)
在商店流程中的各个位置,您都有一行RETURN
。这导致程序立即返回主叫方。换句话说,它不会继续,也永远不会将@accval_LastUpdateError
变量设置为任何内容。
程序非常混乱,下面的代码很可能就是您要找的。 p>
但我会首先提出一些非常快速的建议:
Begin
和BEGIN
。试着坚持其中一个。BEGIN
之后(不是BEGIN TRAN
而不是控制流语句)缩进一次。OUTPUT
参数,可以使用过程返回值(即RETURN 1
。CREATE PROCEDURE [dbo].[oc_AofA_Update_WO7965&WO7951_test]
@aoa_DateStamped SMALLDATETIME = null,
@aoa_DateSent SMALLDATETIME = null,
@aoa_Scanned BIT = null,
@accval_LastUpdatetime VARCHAR(100) = null,
@accval_LastUpdateError INT OUTPUT
AS
SET NOCOUNT ON
DECLARE @Retrivedate VARCHAR(100)
DECLARE @NewRetrivedate VARCHAR(100)
BEGIN
IF(@accval_LastUpdatetime=@NewRetrivedate)
BEGIN
BEGIN TRANSACTION
IF CAST(@aoa_DateStamped AS VARCHAR) = ''
BEGIN
IF @@ERROR !=0
BEGIN
ROLLBACK TRANSACTION
--RETURN
END
SET @accval_LastUpdateError=1
SELECT @accval_LastUpdateError AS accval_LastUpdateError1
END
ELSE
IF @@ERROR !=0
BEGIN
ROLLBACK TRANSACTION
--RETURN
END
COMMIT TRANSACTION
--RETURN
END
SET @accval_LastUpdateError=1
SELECT @accval_LastUpdateError AS accval_LastUpdateError1
END
答案 1 :(得分:0)
您需要在第一个代码块周围放置BEGIN..END,启动事务不会隐式执行此操作。
begin
if(value1= value2)
BEGIN
begin transaction
------
------
------
Commit Transaction
Return
set @result=1
select @result
End transaction
END
Else
begin
set @result=0
select @result
end
End