5

我有如下插入语句。我能够调试我的存储过程并逐步执行我的代码以验证我的代码是否运行,但是发生了一件有趣的事情。

我希望保存在数据库中的值没有保存。相反,在表中创建了一行并RecordCreatedField正确创建,甚至包括主键,但我希望插入的实际列没有。除日期列和 ID 外,所有列都是nvarchar/varchar,但仅填充了这些列。但是,以下@PRCUPC ,@PRCEAN ,@PRCGTIN,@PRCatalogNumber以某种方式被省略了。

EXEC spinsertprodcode 
                  @pid out, 
                  @ProdID, 
                  @UPC, 
                  @EAN, 
                  @TIN, 
                  @CNumber, 
                  0, 
                  0, 
                  1, 
                  @staid, 
                  @counter out



INSERT INTO dbo.ProdCodes
(PRProductID
,PRCUPC
,PRCEAN
,PRCGTIN
,PRCatalogNumber
,PRIsReplacement 
,PRIsReplaced 
,PRCRecordCreatedDate 
,PRCIsActive
,PRStatusFlag)

OUTPUT INSERTED.PRCID INTO @opID

VALUES
(@PRProductID, 
@PRCUPC, 
@PRCEAN, 
@PRCGTIN, 
@PRCatalogNumber,
@PRIsReplacement ,
@PRIsReplaced,
GETDATE(), 
@PRCIsActive, 
@PRStatusFlag)

SELECT @PRCID = O.ID FROm @opID O

将不胜感激有关如何解决此问题或了解正在发生的事情的任何建议。

我确认传递了正确值的调试屏幕的图像

这是调用我的插入代码的主存储过程的 SQl 小提琴。 我的代码的 SQL Fiddle

4

1 回答 1

1

@Kobojunkie:如果您遵循 T-SQL 最佳实践的黄金法则之一,则可以轻松管理此类问题:使用 TRY/CATCH 块来包装 INSERT 和 DELETE 语句的代码。拥有一个适当的 CATCH 块,包括 ERROR_NUMBER、ERROR_SEVERITY、ERROR_PROCEDURE、ERROR_LINE 和 ERROR_MESSAGE 等系统变量,将为您提供有关正在执行的操作出了什么问题的线索:

BEGIN CATCH
    SELECT @ErrorDetails = 
            N'Error raised when executing [Insert/Delete] statement: '
            + N' SQL Error: ' + ERROR_NUMBER()
            + N', Level: ' + ERROR_SEVERITY()
            + N', Line: ' + ERROR_LINE()
            + N', Message: ' + ERROR_MESSAGE() 
END CATCH

希望这些信息有助于解决存储过程中的问题!

于 2012-11-01T15:53:36.100 回答