注意存儲過程名稱的前綴sp
應留給微軟的使用。
如果你想有機會獲得指示行是否已被刪除,那麼你可能想將其添加爲一個輸出參數的標誌。
使用事務來包裝一個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行(S)的影響) – SpringLearner 2015-02-11 12:16:29
@SpringLearner - 那麼你的DELETE語句只刪除一行。當您運行'Select * from de where ClaimVersion = 5'時,您得到了多少行? – 2015-02-11 12:19:15
是,它只刪除一行,但我希望將其作爲數值。實際上我正在執行這個程序使用Java這樣public 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 2015-02-11 12:21:00