0
我正在处理存储过程以将项目添加到我的数据库。该过程还处理编辑项目。代码不断跳过插入语句,即使在我的测试运行中,我声明了应该启动Post而不是Put的Id = 0。有人能指出我的代码中哪里出错了吗?代码跳过插入语句
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'设置了一个值?这不是VBScript,其中未初始化的整数等于0. – 2014-09-02 19:44:42
它从前端传入为0。当它在proc中设置为0时,它没有区别。 – Michael 2014-09-02 19:47:14
你应该确认。此外,如果此代码在过程中,则应显示THAT代码,而不是此代码,该代码没有前端供我们测试。 – 2014-09-02 19:48:00