Sql 代码正在跳过Insert语句

Sql 代码正在跳过Insert语句,sql,sql-server,database,stored-procedures,Sql,Sql Server,Database,Stored Procedures,我正在处理一个存储过程,以便将一个项添加到数据库中。该过程还处理编辑项目的操作。代码一直跳过insert语句,即使在我的测试运行中我声明Id=0,它应该启动Post而不是Put。有人能指出我的代码哪里出错了吗 DECLARE @PersonId INT, @Description VARCHAR(300), @ModifiedById INT, @NeedId INT SET @PersonId = 11 SET @Description = 'Testing agai

我正在处理一个存储过程,以便将一个项添加到数据库中。该过程还处理编辑项目的操作。代码一直跳过insert语句,即使在我的测试运行中我声明Id=0,它应该启动Post而不是Put。有人能指出我的代码哪里出错了吗

DECLARE @PersonId INT,
    @Description VARCHAR(300),
    @ModifiedById INT,
    @NeedId INT

SET @PersonId = 11
SET @Description = 'Testing again'
SET @ModifiedById = 1


BEGIN
--SET NOCOUNT ON;
--SET XACT_ABORT ON;

DECLARE @TimeStamp DATETIME

SET @TimeStamp = GETUTCDATE()

BEGIN TRY
    BEGIN TRANSACTION

    /*--------------------------------------------------------------------------
    INSERT
    --------------------------------------------------------------------------*/
    IF(@NeedId = 0)
        BEGIN
            INSERT INTO [dbo].[CustomerNeeds]
                       ([PersonId]
                       ,[Description]
                       ,[IsActive]
                       ,[LastUpdated]
                       ,[ModifiedById]
                       ,[CreateDate]
                       ,[CreatedById])
                 VALUES
                       (@PersonId
                       ,@Description
                       ,1
                       ,@TimeStamp
                       ,@ModifiedById
                       ,@TimeStamp
                       ,@ModifiedById)


            SELECT @NeedId = CAST(SCOPE_IDENTITY() AS INT)
        END


    /*--------------------------------------------------------------------------
    UPDATE
    --------------------------------------------------------------------------*/
    ELSE
        BEGIN
            UPDATE 
                [dbo].[CustomerNeeds]
            SET 
                [PersonId] = @PersonId
                ,[Description] = @Description
                ,[IsActive] = 1
                ,[LastUpdated] = @TimeStamp
                ,[ModifiedById] = @ModifiedById
             WHERE 
                Id = @NeedId
        END


    /*--------------------------------------------------------------------------
    DELETE ADDRESS ASSOCIATION TO PERSON
    --------------------------------------------------------------------------*/
    DELETE
    FROM
        [dbo].[CustomerNeeds]
    WHERE
        [PersonId] = @PersonId
        AND
        [Id] = @NeedId



    COMMIT TRANSACTION
END TRY

BEGIN CATCH
    ROLLBACK

    DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;

    SELECT
    @ErrorMessage = 'Error happened while saving a customer need -- ' + ERROR_MESSAGE(),
    @ErrorSeverity = ERROR_SEVERITY(),
    @ErrorState = ERROR_STATE();

    -- Raise an error and return
    RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
    RETURN
END CATCH


-- RESULT SET 1: IList<ICustomerNeedsDataContract>
EXEC    [API].[CustomerNeedsList]
        @PersonId = @PersonId
END

我想知道您是否在删除部分引用了错误的表


就目前情况而言,我相信您只需删除刚刚插入的行。

嗯,您什么时候为@NeedId设置过值?这不是未初始化的整数等于0的VBScript。它是作为0从前端传入的。当它在进程中被设置为0时,没有任何区别。您应该确认这一点。另外,如果这个代码在一个过程中,你应该显示那个代码,而不是这个代码,它没有前端供我们测试。你需要NeeID和PersonID吗?你可以使用PRINT添加一些日志,你会看到是否执行了INSERT。正如答案所说,该记录在插入后被删除,因此没有发生任何事情。
DROP TABLE #CustomerNeeds

CREATE TABLE #CustomerNeeds(
                       [PersonId] INT IDENTITY(1,1) NOT NULL
                       ,[Description] NVARCHAR(100)
                       ,[IsActive] BIT
                       ,[LastUpdated] DATETIME
                       ,[ModifiedById] NVARCHAR(100)
                       ,[CreateDate] DATETIME
                       ,[CreatedById] NVARCHAR(100))                       


INSERT INTO #CustomerNeeds
    (Description, IsActive, LastUpdated, ModifiedById, CreateDate, CreatedById)
VALUES
    ('test row 3', 3, CURRENT_TIMESTAMP, 'test_user', CURRENT_TIMESTAMP, 'test_user')
    ,('test row 4', 4, CURRENT_TIMESTAMP, 'test_user', CURRENT_TIMESTAMP, 'test_user')
    ,('test row 5', 5, CURRENT_TIMESTAMP, 'test_user', CURRENT_TIMESTAMP, 'test_user')

DECLARE @PersonId INT,
    @Description VARCHAR(300),
    @ModifiedById INT,
    @NeedId INT

SET @PersonId = 1
SET @Description = 'Testing again'
SET @ModifiedById = 1

BEGIN
--SET NOCOUNT ON;
--SET XACT_ABORT ON;

DECLARE @TimeStamp DATETIME

SET @TimeStamp = GETUTCDATE()

BEGIN TRY
    BEGIN TRANSACTION

    /*--------------------------------------------------------------------------
    INSERT
    --------------------------------------------------------------------------*/
    IF(@PersonId = 0)
        BEGIN
            PRINT 'Insert'

            INSERT INTO #CustomerNeeds
                       ([Description]
                       ,[IsActive]
                       ,[LastUpdated]
                       ,[ModifiedById]
                       ,[CreateDate]
                       ,[CreatedById])
                 VALUES
                       (@Description
                       ,1
                       ,@TimeStamp
                       ,@ModifiedById
                       ,@TimeStamp
                       ,@ModifiedById)
            SELECT @PersonId = CAST(SCOPE_IDENTITY() AS INT)

            SELECT *
            FROM #CustomerNeeds
        END


    /*--------------------------------------------------------------------------
    UPDATE
    --------------------------------------------------------------------------*/
    ELSE
        BEGIN

            PRINT 'Update'

            UPDATE 
                #CustomerNeeds
            SET 
                [Description] = @Description
                ,[IsActive] = 1
                ,[LastUpdated] = @TimeStamp
                ,[ModifiedById] = @ModifiedById
             WHERE 
                [PersonId] = @PersonId

            SELECT *
            FROM #CustomerNeeds
        END


    /*--------------------------------------------------------------------------
    DELETE ADDRESS ASSOCIATION TO PERSON
    --------------------------------------------------------------------------*/
    DELETE
    FROM
        #CustomerNeeds
    WHERE
        [PersonId] = @PersonId

    COMMIT TRANSACTION
END TRY

BEGIN CATCH
    ROLLBACK

    DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;

    SELECT
    @ErrorMessage = 'Error happened while saving a customer need -- ' + ERROR_MESSAGE(),
    @ErrorSeverity = ERROR_SEVERITY(),
    @ErrorState = ERROR_STATE();

    -- Raise an error and return
    RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)

END CATCH

SELECT *
FROM #CustomerNeeds
END