2012-10-12 4 views
5

以下のような挿入ステートメントがあります。ストアドプロシージャをデバッグしてコードを実行して、コードが実行されていることを確認できますが、面白いことが起こります。SQL Serverの挿入ステートメントは正常に実行されますが、行が作成されても値はテーブルに追加されません。

データベースに保存されると予想される値は保存されません。代わりにテーブルに行が作成され、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 

私がこれを修正したり、何が起こっているかを理解していただけると感謝しています。

Image of the Debug Screen where I confirm the right values are passed

は、ここに私の挿入コードを呼び出すメインストアドプロシージャのSQLフィドルです。 SQL Fiddle of my code

+6

ストアドプロシージャの呼び出しに使用しているコードを投稿できますか?私は、パラメータが正しく設定されていないかもしれないと推測します。 – d89761

+0

私はそれらが正しく渡されていることを確認するために値の上にカーソルを置くことができます。そして、私は挿入点に呼び出されたコードにステップインし、値がインストールポイントにもあることを確認することができます。 – Kobojunkie

+1

テーブルにトリガーがありますか? –

答えて

1

@Kobojunkie:あなたは、T-SQLのベストプラクティスの黄金ルールのいずれかに従っている場合の問題のこの種は、容易に管理することができます:INSERTのためにあなたのコードをラップし、DELETE文にtry/catchブロックを使用します。この情報はSPROC内の問題を解決するのに役立ちます

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 

希望を:ERROR_NUMBER、ERROR_SEVERITY、ERROR_PROCEDURE、ERROR_LINEとERROR_MESSAGEなどのシステム変数を含むapproapiate CATCHブロックを持つことは、あなたにアクションが実行されていると間違って何が起こっているかについての手掛かりを与えます!

関連する問題