2016-08-24 10 views
1

私はやや不満な問題を抱えています。INSERTとUPDATEの実行ステータス - MS SQL Server

下位レベル:プロシージャ内のINSERTまたはUPDATEクエリが成功したかどうかを知りたいです。私はすべてのクエリ(SELECTとは別に)に返されるステータスがあるかどうかは100%確信していません。私は、SQL Serverがすべてのストアドプロシージャに戻り値の型を与えていることを知っています。現在、すべてのSQL Serverでは戻り値の型がIntegerです。

中間レベル:Entity Frameworkを使用して、保存されたprocsを呼び出し、proc実行からサービスに変換された(intから)boolean値としてステータスを返すことができます。

より上のレベル:私のサービスから返されたブール値を使用して、実行中のタスクのMVCコントローラに報告することができるようにします。私の問題の最も重要な層の上に

、私は次のコードを持っている:

public virtual ObjectResult<int> Proc_AddApprovalProcessor(string userId, string approverId, int approvalOrder) 
{ 
    return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<int>(
     "EXECUTE [dbo].[Proc_AddApprovalProcessor] @userId, @approverId, @approvalOrder", 
      new SqlParameter { ParameterName = "userId", Value = userId }, 
      new SqlParameter { ParameterName = "approverId", Value = approverId }, 
      new SqlParameter { ParameterName = "approvalOrder", Value = approvalOrder }).FirstOrDefault(); 
} 

答えて

3

をあなたの挿入/更新のストアドプロシージャは、次の行で終わっていることを確認してください:

SELECT @@ROWCOUNT 

次に調べますコードを返し、それが1(または挿入/更新する予定の多くの行)であることを確認します。

+0

おそらく、テーブルにトリガーがあると誤解を招く恐れがあると言えるでしょう。 –

+0

@Evaldas Buinauskasこれは本当ですか?ほとんどの私の更新/挿入/削除ステートメントは、アーカイブテーブルのエントリをトリガし、私は@@ ROWCOUNTに問題があったことはありません –

+0

多分より複雑なトリガに適用されますが、この質問は、混乱のためにhttp://stackoverflow.com/questions/7005225/sql-server-does-trigger-affects-rowcount soryに答えているようです:) –

3

挿入/更新クエリの直後に@@ROWCOUNTサーバー変数を使用して、挿入/更新操作を使用して影響を受けた行の数を確認できます。

declare @fName varchar(50) = 'my name', 
      @lName varchar(50) = 'your name' 
    INSERT INTO myTable(fName,lName) values(@fName,@lName) 

    SELECT @@ROWCOUNT --> 0 - means no rows affected/nothing inserted or updated 
        --> 1 - means row has been inserted or updated successfully 
+0

サンパスに感謝します。唯一の問題は、printが実行中のprocに何も返さないため、そこに置かないのと同じ結果が得られることです。私は@@ ROWCOUNTをupvoteします。 – codeshinobi

+0

@コードシノー確かに、私の間違いの正確さのために問題ないとありがとう:) – Sampath

0

トランザクションを使用している場合は、トランザクション数を返すために以下のコードを使用する必要があります。

return @@ TRANCOUNT;

+0

私はトランザクションを使用していませんが、あなたのコメントのおかげで。私は後で参考のためにブックマークします – codeshinobi