我有一个插入语句如下。我能够调试我的存储过程并逐步执行我的代码以验证我的代码是否运行,但是有趣的事情发生了。
我希望保存在数据库中的值不会保存。而是在表中创建一行并正确创建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 of my code
答案 0 :(得分:1)
@Kobojunkie:如果您遵循T-SQL最佳实践的黄金规则之一,则可以轻松管理此类问题:使用TRY / CATCH块来包装INSERT和DELETE语句的代码。拥有一个包含系统变量(如ERROR_NUMBER,ERROR_SEVERITY,ERROR_PROCEDURE,ERROR_LINE和ERROR_MESSAGE)的CATCH块将为您提供有关正在执行的操作出错的线索:
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
希望这些信息有助于解决问题!