Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2008 R2嵌套IFs未执行_Sql_Sql Server 2008_If Statement - Fatal编程技术网

SQL Server 2008 R2嵌套IFs未执行

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]

这已经让我发疯一个多小时了。我肯定我忽略了一些愚蠢的事情。请随意嘲笑我,告诉我为什么@TransactionType既不是“插入”也不是“更新”,而是“删除”,最后一个ELSE没有执行,仅供参考:

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