5

私は以下のような挿入ステートメントを持っています。ストアドプロシージャをデバッグし、コードをステップ実行してコードが実行されていることを確認できますが、おかしなことが起こります。

データベースに保存されると予想される値は保存されません。代わりに、テーブルに行が作成され、RecordCreatedFieldが正しく作成されます。主キーも含まれていますが、挿入されると予想される実際の列は含まれていません。nvarchar/varchar日付列とIDを除くすべての列はですが、これらの列のみが入力されます。ただし、次の@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フィドル

4

1 に答える 1

1

@Kobojunkie:この種の問題は、T-SQLのベストプラクティスのゴールデンルールの1つに従うと、簡単に管理できます。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

この情報がsproc内の問題の修正に役立つことを願っています!

于 2012-11-01T15:53:36.100 に答える