我有一個過程,我插入值到我的表中。如何檢查值是否插入成功?
declare @fName varchar(50),@lName varchar(50),@check tinyint
INSERT INTO myTbl(fName,lName) values(@fName,@lName)
編輯:
現在我要檢查它是否插入的成功設置@check = 0,否則,@check = 1
我有一個過程,我插入值到我的表中。如何檢查值是否插入成功?
declare @fName varchar(50),@lName varchar(50),@check tinyint
INSERT INTO myTbl(fName,lName) values(@fName,@lName)
編輯:
現在我要檢查它是否插入的成功設置@check = 0,否則,@check = 1
您可以使用@@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
您需要使用@@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
在SQL-Sever的,您可以使用OUTPUT子句來檢查是否值被成功地插入。 通過IF的值被插入,它會顯示插入的值的輸出以下查詢
declare @fName varchar(50),@lName varchar(50)
INSERT INTO myTbl(fName,lName) OUTPUT inserted.* values(@fName,@lName) ;
。您也可以將這些值存儲到新表格中。
有關OUTPUT子句的詳細信息,請轉到[OUTPUT](http://technet.microsoft.com/en-us/庫/ ms177564.aspx) – genius
謝謝你的回答,我更正了我的問題,如果它插入成功,我需要設置@check = 0 – GeoVIP