SQL Server 2008 R2嵌套IFs未执行
这已经让我发疯一个多小时了。我肯定我忽略了一些愚蠢的事情。请随意嘲笑我,告诉我为什么@TransactionType既不是“插入”也不是“更新”,而是“删除”,最后一个ELSE没有执行,仅供参考:SQL Server 2008 R2嵌套IFs未执行,sql,sql-server-2008,if-statement,Sql,Sql Server 2008,If Statement,这已经让我发疯一个多小时了。我肯定我忽略了一些愚蠢的事情。请随意嘲笑我,告诉我为什么@TransactionType既不是“插入”也不是“更新”,而是“删除”,最后一个ELSE没有执行,仅供参考: IF @TransactionType = 'insert' BEGIN INSERT INTO [GLOBAL_TEST_INDICATOR_AUDIT]( [ScheduleID] ,[CTSNumber] ,[TestNumber]
IF @TransactionType = 'insert'
BEGIN
INSERT INTO [GLOBAL_TEST_INDICATOR_AUDIT](
[ScheduleID]
,[CTSNumber]
,[TestNumber]
,[GlobalTestIndicator]
,[CreatedBy]
,[CreatedOn]
,[ModifiedBy]
,[ModifiedOn]
,[TransactionType]
)
VALUES(
@ScheduleID,
@CTSNumber,
@TestGroupNumber,
@GlobalTestIndicator,
@User, -- Created By
GETDATE(), -- Created On
NULL, -- No Modified By for Insert
NULL, -- No Modified On for Insert
@TransactionType
)
IF @@ERROR <> 0 RETURN 10 -- Indicates SQL INSERT Operation Failed!
END
ELSE
BEGIN
IF @TransactionType = 'update'
BEGIN
UPDATE [GLOBAL_TEST_INDICATOR_AUDIT]
SET [ModifiedBy] = @User,
[ModifiedOn] = GETDATE(),
[GlobalTestIndicator] = @GlobalTestIndicator,
[TransactionType] = @TransactionType
WHERE [ScheduleID] = @ScheduleID
IF @@ERROR <> 0 RETURN 20 -- Indicates SQL UPDATE Operation Failed!
END
ELSE
BEGIN
UPDATE [GLOBAL_TEST_INDICATOR_AUDIT]
SET [ModifiedBy] = @User,
[ModifiedOn] = GETDATE(),
[TransactionType] = @TransactionType
WHERE [ScheduleID] = @ScheduleID
IF @@ERROR <> 0 RETURN 30 -- Indicates SQL UPDATE Operation Failed!
END
END
您的第二次最后更新:
与上次更新几乎相同:
你怎么能把两者区分开来
我建议输入一条打印语句,看看是否触发了删除块:
IF @TransactionType = 'update'
BEGIN
UPDATE [GLOBAL_TEST_INDICATOR_AUDIT]
SET [ModifiedBy] = @User,
[ModifiedOn] = GETDATE(),
[GlobalTestIndicator] = @GlobalTestIndicator,
[TransactionType] = @TransactionType
WHERE [ScheduleID] = @ScheduleID
IF @@ERROR <> 0 RETURN 20 -- Indicates SQL UPDATE Operation Failed!
END
ELSE
BEGIN
PRINT 'Not insert or update'
UPDATE [GLOBAL_TEST_INDICATOR_AUDIT]
SET [ModifiedBy] = @User,
[ModifiedOn] = GETDATE(),
[TransactionType] = @TransactionType
WHERE [ScheduleID] = @ScheduleID
IF @@ERROR <> 0 RETURN 30 -- Indicates SQL UPDATE Operation Failed!
END
为了排除显而易见的问题,@ScheduleID的值是多少?您是否确定GLOBAL_TEST_INDICATOR_AUDIT中有一条记录与该值匹配?请放入一条print语句,以确保它位于最后一个ELSE块中。我想您的IF-ELSE结构有误,在IF@TransactionType='update'行上方的开始之前删除ELSE,并使用print语句确保它到达您需要的位置,要退出它,只需执行3个步骤IF=Insert BEGIN,END,然后IF=update BEGIN,END…IF=Delete BEGIN ENDsquillman,你明白了-在另一个表GLOBAL_TEST_INDICATOR_BILLING中没有与@ScheduleID值匹配的记录来匹配GLOBAL_TEST_INDICATOR_AUDIT中的记录,因此它永远不会更新。显然是时候离开一会儿了。
UPDATE [GLOBAL_TEST_INDICATOR_AUDIT]
SET [ModifiedBy] = @User,
[ModifiedOn] = GETDATE(),
[TransactionType] = @TransactionType
WHERE [ScheduleID] = @ScheduleID
IF @TransactionType = 'update'
BEGIN
UPDATE [GLOBAL_TEST_INDICATOR_AUDIT]
SET [ModifiedBy] = @User,
[ModifiedOn] = GETDATE(),
[GlobalTestIndicator] = @GlobalTestIndicator,
[TransactionType] = @TransactionType
WHERE [ScheduleID] = @ScheduleID
IF @@ERROR <> 0 RETURN 20 -- Indicates SQL UPDATE Operation Failed!
END
ELSE
BEGIN
PRINT 'Not insert or update'
UPDATE [GLOBAL_TEST_INDICATOR_AUDIT]
SET [ModifiedBy] = @User,
[ModifiedOn] = GETDATE(),
[TransactionType] = @TransactionType
WHERE [ScheduleID] = @ScheduleID
IF @@ERROR <> 0 RETURN 30 -- Indicates SQL UPDATE Operation Failed!
END