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