Как проверить, было ли значение вставлено успешно или нет?
У меня есть процедура, в которую я вставляю значения в свою таблицу.
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;