2013-10-15 26 views
15

私は自分のテーブルに値を挿入するプロシージャを持っています。値が正常に挿入されたかどうかを確認する方法は?

declare @fName varchar(50),@lName varchar(50),@check tinyint 
INSERT INTO myTbl(fName,lName) values(@fName,@lName) 

EDITED:

今、私はそれが挿入されたかどうかを確認に成功あなたがチェックするためにすぐにINSERTクエリの後@@ROWCOUNTサーバー変数を使用することができます=それ以外0 @Check = 1

答えて

28

を@Check設定したいですインサート操作による影響を受ける行の数。あなたの条件のために

declare @fName varchar(50) = 'Abcd', 
     @lName varchar(50) = 'Efgh' 
INSERT INTO myTbl(fName,lName) values(@fName,@lName) 

PRINT @@ROWCOUNT --> 0- means no rows affected/nothing inserted 
       --> 1- means your row has been inserted successfully 

(コメントごとに)、あなたはCaseステートメントを使用することができますそれは、最後の文の影響を受けた行数を返します

--If you need @check as a bit type please change Int to bit 
DECLARE @check Int = CASE WHEN @@ROWCOUNT = 0 THEN 1 ELSE 0 END 
+0

回答ありがとうございます。私は正しく挿入されている場合は私の質問を修正します。@check = 0を設定する必要があります – GeoVIP

4

あなたは@@ROWCOUNT

を使用する必要があります。行数が20億を超える場合は、ROWCOUNT_BIGを使用します。

@@ ROWCOUNTはスコープと接続の両方に安全です。

実際には、接続とスコープの の最後の文の行数だけが読み込まれます。

トリガー がベーステーブルにある場合でも、SQL Serverで@@ ROWCOUNTを使用することは安全です。トリガーは結果を歪ませません。あなたは期待どおりの を得るでしょう。 NOCOUNTが設定されていても@@ ROWCOUNTは正しく動作します。

ので、クエリは次のようになります。

declare @fName varchar(50), @lName varchar(50), @check tinyint = 0 
... 
INSERT INTO myTbl(fName,lName) values(@fName,@lName) 
if @@ROWCOUNT>0 
    set @check = 1 
0

SQL-Severのでは、値が正常に挿入されているかどうかを確認するためにOUTPUT句を使用することができます。値は、それが挿入された値の出力が表示されます挿入されている場合、クエリ


declare @fName varchar(50),@lName varchar(50) 

INSERT INTO myTbl(fName,lName) OUTPUT inserted.* values(@fName,@lName) ; 

に従うことにより 。これらの値を新しいテーブルに保存することもできます。

+0

OUTPUT句の詳細については、[OUTPUT](http://technet.microsoft.com/en-us/)を参照してください。ライブラリ/ ms177564.aspx) – genius

関連する問題