自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server業(yè)務(wù)規(guī)則的鏈接技術(shù)之探討

數(shù)據(jù)庫 SQL Server
此文章主要講述的是關(guān)于SQL Server業(yè)務(wù)規(guī)則的鏈接技術(shù)的探討,同時(shí)我們以實(shí)例的方式來對其進(jìn)行說明,以下就是文章的主要內(nèi)容描述。

以下的文章主要描述的是關(guān)于SQL Server業(yè)務(wù)規(guī)則的鏈接技術(shù)的探討,關(guān)于這個(gè)問題一直存在一個(gè)的爭論,即在哪里存儲(chǔ)應(yīng)用程序的相關(guān)業(yè)務(wù)邏輯的,到底是在應(yīng)用程序本身的業(yè)務(wù)邏輯層中還是在數(shù)據(jù)庫層中。

應(yīng)用程序邏輯層的絕對支持者提出,數(shù)據(jù)庫的唯一目的就是保存數(shù)據(jù),以備應(yīng)用程序所用。

提倡用數(shù)據(jù)庫來存儲(chǔ)SQL Server業(yè)務(wù)規(guī)則的人則堅(jiān)持認(rèn)為,業(yè)務(wù)規(guī)則最好存儲(chǔ)在數(shù)據(jù)庫中,因?yàn)閿?shù)據(jù)也存儲(chǔ)在那里,規(guī)則在那里更容易運(yùn)行。而在我看來,對于存儲(chǔ)應(yīng)用程序的邏輯來說,沒有一個(gè)“最好的地方”——它真正取決于您正在解決的業(yè)務(wù)問題。

鏈接數(shù)據(jù)庫存儲(chǔ)過程

如果您更喜歡將全部或一部分業(yè)務(wù)邏輯存儲(chǔ)在數(shù)據(jù)庫中的話,那么知道SQL Server中的一種被我稱作業(yè)務(wù)規(guī)則鏈接的技術(shù)是很有好處的?;舅枷刖褪悄梢栽跀?shù)據(jù)庫中運(yùn)行一系列的存儲(chǔ)過程,這是以在您需要的時(shí)候,不同進(jìn)程的元數(shù)據(jù)存儲(chǔ)在一個(gè)數(shù)據(jù)庫表格中為基礎(chǔ)的。這樣做的好處就是,規(guī)則都存儲(chǔ)在數(shù)據(jù)庫的程序中,并且因?yàn)榇鎯?chǔ)過程的運(yùn)行是以一個(gè)表格中的值為基礎(chǔ)的,所以您可以改變程序執(zhí)行的順序,還能夠很容易地打開或終止SQL Server業(yè)務(wù)規(guī)則。讓我們來看一個(gè)例子,這樣概念會(huì)更清晰。

業(yè)務(wù)規(guī)則鏈接實(shí)例

要用我想用的方式在數(shù)據(jù)庫中執(zhí)行SQL Server業(yè)務(wù)規(guī)則,就必須定義元數(shù)據(jù)。下面這些信息將會(huì)以數(shù)據(jù)庫表格的形式被保存:存儲(chǔ)過程的名稱、業(yè)務(wù)規(guī)則運(yùn)行的順序、所運(yùn)行業(yè)務(wù)程序的類型和業(yè)務(wù)規(guī)則是否活動(dòng)等。列表A中包括了創(chuàng)建表格的腳本。

列表A:

 

 

  1. CREATE TABLE BusinessLogic ( ProcessType VARCHAR(20) NOT NULL,  
  2. RunSequence TINYINT NOT NULL, LogicProcedure VARCHAR(255) NOT NULL,   
  3. BusinessLogicActive BIT DEFAULT(1) NOT NULL,   
  4. CONSTRAINT pk_BusinessLogic PRIMARY KEY (ProcessType, RunSequence) )  

在列表B中,我在BusinessLogic表中加載了數(shù)據(jù)。這些數(shù)據(jù)是稍后我將用來處理業(yè)務(wù)規(guī)則的。RunSequence是執(zhí)行存儲(chǔ)過程的實(shí)際順序(過程被存儲(chǔ)在LogicProcedure字段中)。表格中還包含了一個(gè)指示符,用來表示業(yè)務(wù)規(guī)則是否為活動(dòng)的。

存儲(chǔ)這個(gè)數(shù)據(jù)讓我能夠改變規(guī)則運(yùn)行的順序,或者在需要的時(shí)候打開或終止規(guī)則,而無需對代碼做出更改。要向業(yè)務(wù)邏輯系統(tǒng)中添加規(guī)則也十分簡單,因?yàn)樗枳龅木褪窍驍?shù)據(jù)庫中添加程序,然后在元數(shù)據(jù)表格中添加需要的數(shù)據(jù)就可以了。

 

在列表C中,我創(chuàng)建了SQL Server業(yè)務(wù)規(guī)則程序(例子中包含的程序是非常簡單的;但是,在現(xiàn)實(shí)情況中,如果需要的話,它們可以很復(fù)雜)。所有的程序中包括了相同的輸入?yún)?shù);這是業(yè)務(wù)規(guī)則鏈接的一個(gè)小小的局限性。

列表B:

 

 

  1. INSERT INTO BusinessLogic(ProcessType, RunSequence,  
  2. LogicProcedure) VALUES('CustomerOrders', 1, 'usp_Rule1')   
  3. INSERT INTO BusinessLogic(ProcessType, RunSequence,   
  4. LogicProcedure) VALUES('CustomerOrders', 2, 'usp_Rule2') INSERT INTO BusinessLogic  
  5. (ProcessType, RunSequence, LogicProcedure) VALUES('CustomerOrders', 3, 'usp_Rule3')   
  6. INSERT INTO BusinessLogic(ProcessType, RunSequence, LogicProcedure) VALUES('CustomerOrders', 4, 'usp_Rule4')  

列表C:

 

 

 

  1. CREATE PROCEDURE usp_Rule1 (@RunSequence TINYINT) AS PRINT 'In Procedure:   
  2. ' + OBJECT_NAME(@@PROCID) PRINT 'Parameter Value Passed In:'  
  3. + CAST(@RunSequenceAS VARCHAR(2)) GO CREATE PROCEDURE usp_Rule2  
  4. (@RunSequence TINYINT) AS PRINT 'In Procedure: ' + OBJECT_NAME(@@PROCID)   
  5. PRINT 'Parameter Value Passed In:' + CAST(@RunSequenceAS VARCHAR(2))   
  6. GO CREATE PROCEDURE usp_Rule3 (@RunSequence TINYINT) AS PRINT 'In Procedure:  
  7. ' + OBJECT_NAME(@@PROCID) PRINT 'Parameter Value Passed In:'  
  8. + CAST(@RunSequenceAS VARCHAR(2)) GO CREATE PROCEDURE usp_Rule4 (@RunSequence TINYINT)  
  9. AS PRINT 'In Procedure: ' + OBJECT_NAME(@@PROCID) PRINT 'Parameter Value Passed In:' + CAST(@RunSequenceAS VARCHAR(2)) GO  

 

 

接下來就是處理SQL Server業(yè)務(wù)規(guī)則的代碼了。在列表D中,我用一個(gè)指針在表格中迭代,該表格中的記錄都保存著元數(shù)據(jù)。當(dāng)可以用一種不同的循環(huán)結(jié)構(gòu)來完成同一個(gè)邏輯時(shí),用指針要簡單一些。不管是怎么樣完成的,都需要用某種類型的迭代循環(huán)和執(zhí)行所需要的業(yè)務(wù)程序。運(yùn)行這個(gè)代碼將執(zhí)行每一個(gè)文章前面所定義的四個(gè)存儲(chǔ)過程。

 

列表D:

 

 

  1. DECLARE @LogicProcedure VARCHAR(255) DECLARE @RunSequence TINYINT  
  2. DECLARE LogicCursor CURSOR FOR SELECT LogicProcedure, RunSequence  
  3. FROM BusinessLogic WHERE ProcessType = 'CustomerOrders' AND BusinessLogicActive = 1 
  4. ORDER BY RunSequence ASC OPEN LogicCursor FETCH NEXT FROM LogicCursor INTO  
  5. @LogicProcedure, @RunSequence WHILE @@FETCH_STATUS = 0   
  6. BEGIN EXECUTE @LogicProcedure --//Call procedure stored in variable  
  7. @RunSequence = @RunSequence --//Pass in parameter PRINT '-----------------------------'   
  8. FETCH NEXT FROM LogicCursor INTO @LogicProcedure, @RunSequence END CLOSE LogicCursor DEALLOCATE LogicCursor GO  

 

 

在列表D中,有兩個(gè)主要引人注意的地方。第一個(gè)就是用來從表格中檢索記錄的select語句,所檢索的記錄中包含了處理業(yè)務(wù)規(guī)則的信息。從這個(gè)簡單的查詢中,我可以為任何類型的業(yè)務(wù)處理從BusinessLogic表中返回行。我還能保證規(guī)則是活動(dòng)的,并且按照它們需要執(zhí)行的順序返回。

第二個(gè)就是執(zhí)行業(yè)務(wù)規(guī)則的方式。當(dāng)指針迭代時(shí),它從BusinessLogic表中檢索將要被執(zhí)行的存儲(chǔ)過程的名稱,然后將其儲(chǔ)存在一個(gè)邏輯變量中。EXECUTE命令允許用戶執(zhí)行存儲(chǔ)過程,即使該存儲(chǔ)過程的名稱被儲(chǔ)存在一個(gè)變量中。在這種方式下,調(diào)用存儲(chǔ)過程還使得我能夠向存儲(chǔ)過程中輸入所需的參數(shù)。

這使我回到了先前關(guān)于業(yè)務(wù)程序具有相同數(shù)量的輸入?yún)?shù)這一點(diǎn)。我能夠以一種相當(dāng)動(dòng)態(tài)的方式運(yùn)行業(yè)務(wù)程序,這取決于在程序運(yùn)行時(shí)BusinessLogic表中儲(chǔ)存了什么。但是,現(xiàn)在我還沒有一種方法可以動(dòng)態(tài)地向業(yè)務(wù)程序輸入?yún)?shù)。

一種簡單的解決辦法就是保證所有的業(yè)務(wù)程序接受相同數(shù)量的參數(shù),不管用不用它們。這種技術(shù)保證我們始終為業(yè)務(wù)程序提供所需的參數(shù)。也有其他的方法可以實(shí)現(xiàn)這些所需參數(shù)的輸入,但是那些不是這篇文章所要討論的。

扼要重述

如果您的應(yīng)用程序在數(shù)據(jù)庫中儲(chǔ)存它的任何一個(gè)或全部業(yè)務(wù)邏輯,那么有可能它就是被我稱作SQL Server業(yè)務(wù)規(guī)則鏈接的一個(gè)候選者。這種方法允許存儲(chǔ)過程在數(shù)據(jù)庫中依次運(yùn)行,并且讓您能夠在需要的時(shí)候打開或終止這些業(yè)務(wù)規(guī)則。

使用這種方法的一些潛在缺陷包括數(shù)據(jù)安全(執(zhí)行業(yè)務(wù)程序的數(shù)據(jù)儲(chǔ)存在一個(gè)表格中),和向業(yè)務(wù)邏輯程序輸入?yún)?shù)的非動(dòng)態(tài)性。如果您覺得對于您的業(yè)務(wù)問題來說,這種方法利大于弊的話,我鼓勵(lì)您嘗試一下這種方法。

 

【編輯推薦】

  1. SQL Server 分布式數(shù)據(jù)庫的2種不同系統(tǒng)
  2. 造成SQL Server查詢速度慢的10種原因
  3. 造成SQL Server查詢速度慢的原因與優(yōu)化
  4. 三種SQL Server 恢復(fù)模式的比較
  5. 對SQL Server 2008的商業(yè)智能的解析

 

責(zé)任編輯:佚名 來源: 賽迪網(wǎng)
相關(guān)推薦

2009-02-16 09:35:19

業(yè)務(wù)規(guī)則鏈接SQL Server

2011-03-29 15:42:08

SQL Server鏈接

2010-07-06 08:36:55

SQL Server實(shí)

2010-11-11 14:14:52

SQL Server排

2012-08-29 09:29:28

SQL Server

2010-11-11 14:05:17

SQL Server排

2010-07-05 18:02:37

SQL Server數(shù)

2015-07-22 17:27:41

SQL SERVER 鏈接

2010-09-25 09:12:44

SQL Server

2010-07-05 17:55:26

SQL Server更

2010-09-13 14:05:09

sql server外

2010-07-21 10:21:49

SQL Server

2010-08-23 08:43:49

SQL ServerMySQL

2010-07-21 10:27:49

SQL Server

2010-09-13 13:58:29

sql server外

2010-06-18 08:30:48

SQL Server

2011-08-30 11:04:30

鏈接查詢內(nèi)連接外連接

2010-07-13 14:02:05

SQL Server創(chuàng)

2022-11-04 08:34:27

Oracle數(shù)據(jù)庫

2010-07-21 10:41:55

SQL Server
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號