@@ROWCOUNT
, в общем, говорит вам, сколько строк было затронуто последним оператором, поэтому вы можете добавить тест IF @@ROWCOUNT = 0
после каждого INSERT
, и это скажет вам, что строк нет был вставлен этим заявлением.
Единственное, что следует опасаться, это то, что @@ROWCOUNT
(например, @@ERROR
1 ) сбрасывается на практически каждое утверждение, включая такие вещи, как IF
!. Поэтому, если вам нужны более сложные проверки для нескольких операторов (или вы хотите проверить оба), лучше записать их значения в локальные переменные:
DECLARE @rc int
DECLARE @err int
DECLARE @ids TABLE (Id int);
DECLARE @temp TABLE (Id int);
insert into @temp
output inserted.Id into @ids
select 10;
SELECT @rc = @@ROWCOUNT, @err = @@ERROR
--If we check @@ROWCOUNT again here, it will be equal to 1 because of the assigning SELECT
--but @rc and @err retain the values from the INSERT
1 Конечно, современный код должен использовать TRY
/ CATCH
для обработки ошибок, но я все еще время от времени возвращаюсь к методам "старой школы".