| | 列表C:
CREATE PROCEDURE usp_Rule1 (@RunSequence TINYINT)
AS
PRINT 'In Procedure: ' OBJECT_NAME(@@PROCID)
PRINT 'Parameter Value Passed In:' CAST(@RunSequenceAS VARCHAR(2))
GO
CREATE PROCEDURE usp_Rule2 (@RunSequence TINYINT)
AS
PRINT 'In Procedure: ' OBJECT_NAME(@@PROCID)
PRINT 'Parameter Value Passed In:' CAST(@RunSequenceAS VARCHAR(2))
GO
CREATE PROCEDURE usp_Rule3 (@RunSequence TINYINT)
AS
PRINT 'In Procedure: ' OBJECT_NAME(@@PROCID)
PRINT 'Parameter Value Passed In:' CAST(@RunSequenceAS VARCHAR(2))
GO
CREATE PROCEDURE usp_Rule4 (@RunSequence TINYINT)
AS
PRINT 'In Procedure: ' OBJECT_NAME(@@PROCID)
PRINT 'Parameter Value Passed In:' CAST(@RunSequenceAS VARCHAR(2))
GO |
接下来就是处理业务规则的代码了。在列表D中,我用一个指针在表格中迭代,该表格中的记录都保存着元数据。当可以用一种不同的循环结构来完成同一个逻辑时,用指针要简单一些。不管是怎么样完成的,都需要用某种类型的迭代循环和执行所需要的业务程序。运行这个代码将执行每一个文章前面所定义的四个存储过程。
列表D:
DECLARE @LogicProcedure VARCHAR(255)
DECLARE @RunSequence TINYINT
DECLARE LogicCursor CURSOR
FOR
SELECT LogicProcedure, RunSequence FROM BusinessLogic
WHERE
ProcessType = 'CustomerOrders' AND
BusinessLogicActive = 1
ORDER BY RunSequence ASC
OPEN LogicCursor
FETCH NEXT FROM LogicCursor
INTO @LogicProcedure, @RunSequence
WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE @LogicProcedure --//Call procedure stored in variable
@RunSequence = @RunSequence --//Pass in parameter
PRINT '-----------------------------'
FETCH NEXT FROM LogicCursor
INTO @LogicProcedure, @RunSequence
END
CLOSE LogicCursor
DEALLOCATE LogicCursor
GO |
在列表D中,有两个主要引人注重的地方。第一个就是用来从表格中检索记录的select语句,所检索的记录中包含了处理业务规则的信息。从这个简单的查询中,我可以为任何类型的业务处理从BusinessLogic表中返回行。我还能保证规则是活动的,并且按照它们需要执行的顺序返回。
第二个就是执行业务规则的方式。当指针迭代时,它从BusinessLogic表中检索将要被执行的存储过程的名称,然后将其储存在一个逻辑变量中。EXECUTE命令答应用户执行存储过程,即使该存储过程的名称被储存在一个变量中。在这种方式下,调用存储过程还使得我能够向存储过程中输入所需的参数。
这使我回到了先前关于业务程序具有相同数量的输入参数这一点。我能够以一种相当动态的方式运行业务程序,这取决于在程序运行时BusinessLogic表中储存了什么。但是,现在我还没有一种方法可以动态地向业务程序输入参数。
| 共3页: 上一页 [1] 2 [3] 下一页 |
评论加载中…