Обратите внимание, что префикс sp
на имена хранимых процедур должен быть оставлен для использования Microsoft.
Если вы хотите иметь доступ к флагу, который указывает, были ли удалены строки, вы, вероятно, захотите добавить его в качестве выходного параметра.
Использование транзакции для обертывания одного заявления DELETE
не принесет особых результатов. Я оставил код транзакции в предположении, что это часть более крупной процедуры.
Если у вас есть несколько шагов в транзакции, вы можете использовать RaIsError
, чтобы указать вызывающему абоненту, где возникла проблема, и предоставить конкретный контекст приложения, например. аргументы, переданные процедуре.
Вы также можете использовать try
/catch
в хранимой процедуре. Иногда удобная, иногда неуклюжая в зависимости от того, какие операции вам нужно выполнять, и сколько вам нужно знать об исключениях.
create procedure [dbo].[Configuration_test]
@Id Int, -- Unused.
@Deleted Int Output -- Flag: 1 if any rows are deleted, 0 otherwise.
as
set nocount on
declare @Err as Int = 0;
set @Deleted = 0;
begin transaction;
delete
from de
where ClaimVersion = 5;
select @Deleted = case when @@RowCount > 0 then 1 else 0 end,
@Err = @@Error;
if @Err != 0
begin
rollback transaction;
return;
end;
-- Next operation...
set @Err = @@Error;
if @Err != 0
begin
rollback transaction;
RaIsError('Boo boo in step 42 processing Id %d.', 13, 42, @Id);
end;
-- Repeat operation/error check...
commit transaction;
Спасибо, но это еще раз показывает (1 строка (ы) пострадавших) – SpringLearner
@SpringLearner - Тогда ваше ВЕЬЕТЕ удаляет только один ряд. Сколько строк вы получаете при запуске 'Select * from from где ClaimVersion = 5' –
yes его удаление только одной строки, но я хочу, чтобы это числовое значение.actallY Я выполняю эту процедуру, используя java, как это public Integer deleteSublist (Integer subPartsId) { \t String storedProcedure = "exec spConfiguration_SubParts_Del" + subPartsId; \t System.out.println (storedProcedure); \t Запрос запроса = entityManagerUtil.entityManager.createNativeQuery (storedProcedure); \t return query.executeUpdate(); } – SpringLearner