以下為引用的內(nèi)容:
Product
產(chǎn)品編號 產(chǎn)品名稱 客戶訂數(shù)
001 鋼筆 30
002 毛筆 50
003 鉛筆 100
order
產(chǎn)品編號 客戶名 客戶訂金
001 南山區(qū) $30
002 羅湖區(qū) $50
003 寶安區(qū) $4
請實(shí)現(xiàn)按編號為連接條件,將兩個表連接成一個臨時表,該表只含編號.產(chǎn)品名.客戶名.訂金.總金額,
Create proc temp_sale as select a.產(chǎn)品編號,a.產(chǎn)品名稱,b.客戶名,b.客戶訂金,a.客戶訂數(shù)* b.客戶訂金 as總金額 into #temptable from Product a inner join order b on a.產(chǎn)品編號=b.產(chǎn)品編號 if @@error=0 print 'Good' else print 'Fail' go |
三、SQL存儲過程學(xué)習(xí):存儲過程的調(diào)用
調(diào)用帶參數(shù)存儲過程的幾種方式
1) 這也是最簡單的方法,兩個輸入?yún)?shù),無返回值,用于Insert,Update,Delete操作較多。
以下為引用的內(nèi)容:
conn.Execute "procname varvalue1,varvalue2"
2) 如果要返回 Recordset 集:
以下為引用的內(nèi)容:
set rs = server.createobject("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2",conn
3) 以上兩種方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。
首先說明,返回值有兩種。一種是在存儲過程中直接return一個值,就象C和VB的函數(shù)返回值那樣;另一種是可以返回多個值,存儲這些值的變量名稱需要在調(diào)用參數(shù)中先行指定。
四、特殊的存儲過程-觸發(fā)器
1.觸發(fā)器的概念及作用
(1) 強(qiáng)化約束(Enforce restriction)
觸發(fā)器能夠?qū)崿F(xiàn)比CHECK 語句更為復(fù)雜的約束。
(2) 跟蹤變化Auditing changes
觸發(fā)器可以偵測數(shù)據(jù)庫內(nèi)的操作,從而不允許數(shù)據(jù)庫中未經(jīng)許可的指定更新和變化。
(3) 級聯(lián)運(yùn)行(Cascaded operation)。
觸發(fā)器可以偵測數(shù)據(jù)庫內(nèi)的操作,并自動地級聯(lián)影響整個數(shù)據(jù)庫的各項內(nèi)容。例如,某個表上的觸發(fā)器中包含有對另外一個表的數(shù)據(jù)操作(如刪除,更新,插入)而該操作又導(dǎo)致該表上觸發(fā)器被觸發(fā)。
(4) 存儲過程的調(diào)用(Stored procedure invocation)。
為了響應(yīng)數(shù)據(jù)庫更新觸,發(fā)器可以調(diào)用一個或多個存儲過程,甚至可以通過外部過程的調(diào)用而在DBMS( 數(shù)據(jù)庫管理系統(tǒng))本身之外進(jìn)行操作。
由此可見,觸發(fā)器可以解決高級形式的業(yè)務(wù)規(guī)則或復(fù)雜行為限制以及實(shí)現(xiàn)定制記錄等一些方面的問題。例如,觸發(fā)器能夠找出某一表在數(shù)據(jù)修改前后狀態(tài)發(fā)生的差異,并根據(jù)這種差異執(zhí)行一定的處理。此外一個表的同一類型(Insert、 Update、 Delete)的多個觸發(fā)器能夠?qū)ν环N數(shù)據(jù)操作采取多種不同的處理。
總體而言,觸發(fā)器性能通常比較低。當(dāng)運(yùn)行觸發(fā)器時,系統(tǒng)處理的大部分時間花費(fèi)在參照其它表的這一處理上,因?yàn)檫@些表既不在內(nèi)存中也不在數(shù)據(jù)庫設(shè)備上,而刪除表和插入表總是位于內(nèi)存中??梢娪|發(fā)器所參照的其它表的位置決定了操作要花費(fèi)的時間長短。
2.觸發(fā)器的種類
SQL Server 2000 支持兩種類型的觸發(fā)器:AFTER 觸發(fā)器和INSTEAD OF 觸發(fā)器。其中AFTER 觸發(fā)器即為SQL Server 2000 版本以前所介紹的觸發(fā)器。該類型觸發(fā)器要求只有執(zhí)行某一操作(Insert Update Delete) 之后,觸發(fā)器才被觸發(fā),且只能在表上定義。可以為針對表的同一操作定義多個觸發(fā)器。對于AFTER 觸發(fā)器,可以定義哪一個觸發(fā)器被最先觸發(fā),哪一個被最后觸發(fā),通常使用系統(tǒng)過程sp_settriggerorder 來完成此任務(wù)。
INSTEAD OF 觸發(fā)器表示并不執(zhí)行其所定義的操作(Insert、 Update、 Delete),而僅是執(zhí)行觸發(fā)器本身。既可在表上定義INSTEAD OF 觸發(fā)器,也可以在視圖上定義INSTEAD OF 觸發(fā)器,但對同一操作只能定義一個INSTEAD OF 觸發(fā)器。