Как проверить, было ли значение вставлено успешно или нет?

У меня есть процедура, в которую я вставляю значения в свою таблицу.

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

Редакция:

Теперь я хочу проверить, правильно ли он вставлен. @check = 0 else @check = 1

Ответы

Ответ 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

Ответ 2

Вам нужно использовать @@ROWCOUNT

Возвращает количество строк, затронутых последним оператором. Если количество строк превышает 2 миллиарда, используйте ROWCOUNT_BIG.

@@ROWCOUNT безопасен как по объему, так и по соединению.

На самом деле, он читает только последний счетчик строк для этого соединение и область применения.

Безопасно использовать @@ROWCOUNT в SQL Server даже при наличии триггера на базовом столе. Триггер не будет искажать ваши результаты; ты получишь что вы ожидаете @@ROWCOUNT работает правильно, даже если установлен NOCOUNT.

поэтому ваш запрос должен быть:

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

Ответ 3

В SQL-Sever вы можете использовать предложение OUTPUT, чтобы проверить, правильно ли вставлены значения. Следуя запросу

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

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

 

ЕСЛИ значения вставлены, он покажет вывод вставленных значений. Вы также можете сохранить эти значения в новой таблице.

Ответ 4

Вы можете использовать @@rowcount после вставки таблицы

ОБЪЯВИТЬ @check int

INSERT INTO Сотрудники (имя, адрес электронной почты, телефон, [адрес]) VALUES ( 'Test', '[email protected]', '', '')

если (@@ROWCOUNT> 0) SET @check = 1

SELECT @check;