2013-10-15 53 views
15

我有一個過程,我插入值到我的表中。如何檢查值是否插入成功?

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

編輯:

現在我要檢查它是否插入的成功設置@check = 0,否則,@check = 1

回答

28

您可以使用@@ROWCOUNT服務器變量後立即插入查詢檢查插入操作受影響的行數。

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子句來檢查是否值被成功地插入。 通過IF的值被插入,它會顯示插入的值的輸出以下查詢


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

相關問題