一、原理:系统中每张单据在进行新增(A)、删除(D)、修改(U)、关闭(L)、取消(C)时都会触发数据库相应业务数据的更新,更新数据但不立刻commit,更新完数据后会先触发一个名为SBO_SP_TransactionNotification的存储过程,存储过程返回名为@error的参数,取1或者0。当返回0时表示正常,系统继续commit操作;当返回1时表示不正常,数据库回滚,操作无效。
该存储过程代码如下:
USE [DFKJ_TEST] GO /****** Object: StoredProcedure [dbo].[SBO_SP_TransactionNotification] Script Date: 06/28/2014 12:20:57 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[SBO_SP_TransactionNotification] @object_type nvarchar(20), -- SBO Object Type @transaction_type nchar(1), -- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose @num_of_cols_in_key int, @list_of_key_cols_tab_del nvarchar(255), @list_of_cols_val_tab_del nvarchar(255) AS begin -- Return values declare @error int -- Result (0 for no error) declare @error_message nvarchar (200) -- Error string to be displayed select @error = 0 select @error_message = N‘Ok‘ -------------------------------------------------------------------------------------------------------------------------------- -- ADD YOUR CODE HERE -------------------------------------------------------------------------------------------------------------------------------- -- Select the return values select @error, @error_message END
服务器会给这个存储过程传5个参数,分别是:
@object_type nvarchar(20), --操作的单据编号
@transaction_type nchar(1),--操作类型 [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose
@num_of_cols_in_key int, --待操作数据表的主键个数
@list_of_key_cols_tab_del nvarchar(255),--主键名称,如果有多个主键,以“;”分割
@list_of_cols_val_tab_del nvarchar(255) --主键值,以“;”分割。
这是在这个存储过程中我们唯一能抓到的参数,控制逻辑就要运用到这些参数。
读代码可以发现默认情况下@error的取值是0,我们可以在这个位置加入代码来进行相应的控制。
1-0SBO学习心得(存储过程理论),布布扣,bubuko.com
原文:http://www.cnblogs.com/dfkjerp/p/3813227.html