




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章存儲(chǔ)過(guò)程
9?1存儲(chǔ)過(guò)程概述
9.2創(chuàng)建管理簡(jiǎn)單存儲(chǔ)過(guò)程
9.3創(chuàng)建管理帶參的存儲(chǔ)過(guò)程
9.4其他存儲(chǔ)過(guò)程
1
數(shù)據(jù)摩復(fù))
恢復(fù)模式也):
備份類(lèi)型隹):
備份組件
◎數(shù)據(jù)庫(kù)(2)
。文件和文件組⑥)
0在以下天數(shù)后量):天
O在⑥:
目標(biāo)
:D651F26
備份到:@磁盤(pán)(I)S1南印
:D651F26\Adn?inistrator
令連接雇性
就緒
2
setselect
同時(shí)對(duì)多個(gè)變量同時(shí)賦值不支持支持
表達(dá)式返回多個(gè)值時(shí)出錯(cuò)將返回的
最后一個(gè)值賦給變量
表達(dá)式未返回值變量被賦null值變量保持
原值
3
declare@addrvarchar(128)
set@addr=(selectaddrfromchinadbal)
/////////////////////
declare@addrvarchar(128)
select@addr=addrfromchinadbal
print@addr
///////////////////////
declare@addrvarchar(128)
set@addr='初始值'
set@addr=(selectaddrfromchinadbalwhereuserid=4)
print@addr
/////////////////////////
declare@addrvarchar(128)
set@addr='初始值'
select@addr=addrfromchinadbalwhereuserid=4
print@addr
////////////////
declare@addrvarchar(128)
set@addr='初始值'
select@addr=(selectaddrfromchinadbalwhereuserid=4)
print@addr
4
Go的使用技巧
execsp_addtypetaihang,'smllint’,
'notnull'
DECLARE@ffloat,@cnchar(8)
createtable
5
9.1存儲(chǔ)過(guò)程概述
1.存儲(chǔ)過(guò)程概念
存儲(chǔ)過(guò)程是為了實(shí)現(xiàn)某個(gè)特定任務(wù),由一組預(yù)先編譯好的
SQL語(yǔ)句組成,將其放在服務(wù)器上,由用戶通過(guò)指定存儲(chǔ)過(guò)程
的名字來(lái)執(zhí)行的一種數(shù)據(jù)庫(kù)對(duì)象。
.存儲(chǔ)過(guò)程類(lèi)型
2系統(tǒng)存儲(chǔ)過(guò)程存儲(chǔ)以SP_為前綴,是由SQL
■系統(tǒng)存儲(chǔ)過(guò)程VI
Server2005自己創(chuàng)建、管理和使用的一種
■擴(kuò)展存儲(chǔ)過(guò)程特殊的存儲(chǔ)過(guò)程,不能對(duì)其進(jìn)行修改或刪除。
■用戶自定義存儲(chǔ)過(guò)程如Sp_helpdb、Sp_renamedb等。
由用戶自行創(chuàng)建的存儲(chǔ)過(guò)程,可以輸入?yún)?shù)、
向客戶端返回表格或結(jié)果、消息等,也可以
返回輸出函數(shù)。
第9章存儲(chǔ)過(guò)程
9.1存儲(chǔ)過(guò)程概述
9.2創(chuàng)建管理簡(jiǎn)單存儲(chǔ)過(guò)程
9.3創(chuàng)建管理帶參的存儲(chǔ)過(guò)程
9.4其他存儲(chǔ)過(guò)程
7
9.2創(chuàng)建管理簡(jiǎn)單的存儲(chǔ)過(guò)程
921無(wú)參存儲(chǔ)過(guò)程的創(chuàng)建
9.2.2無(wú)參存儲(chǔ)過(guò)程的執(zhí)行
9.2.3查看存儲(chǔ)過(guò)程
9.2.4修改存儲(chǔ)過(guò)程
9.2.5編譯存儲(chǔ)過(guò)程
9.2.6刪除存儲(chǔ)過(guò)程
8
921無(wú)參存儲(chǔ)過(guò)程的創(chuàng)建
使用SQL語(yǔ)句創(chuàng)建存儲(chǔ)過(guò)程
1)語(yǔ)法格式如下:
CREATEPROC[EDURE]procedure_name
ASsql_statement[...n]
2)語(yǔ)法注釋:
procedure_name:新建存儲(chǔ)過(guò)程的名稱,其名稱必須符
合標(biāo)識(shí)符命玄規(guī)則,且對(duì)于數(shù)據(jù)庫(kù)及其所有者必須唯一。
sqlstatement:指存儲(chǔ)過(guò)程中的任意數(shù)目和類(lèi)型的
Transact-SQL語(yǔ)句。
9
921無(wú)參存儲(chǔ)過(guò)程的創(chuàng)建區(qū))
例1:在PUBS數(shù)據(jù)庫(kù)中,創(chuàng)建一個(gè)名
pjsearchorddate的存儲(chǔ)過(guò)程,該存儲(chǔ)過(guò)程將查詢出sales
表中訂購(gòu)日期ord_date在1994年以后的記錄信息。
代碼如下:
CREATEPROCpr_searchorddate
AS
SELECT*
FROMsales
WHEREord_date>=T1994-l-lf
GO
10
z
創(chuàng)建存儲(chǔ)過(guò)程的注意事項(xiàng)
■只能在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建存儲(chǔ)過(guò)程。
■數(shù)據(jù)庫(kù)的所有者可以創(chuàng)建存儲(chǔ)過(guò)程,也可以授權(quán)其他用
戶創(chuàng)建存儲(chǔ)過(guò)程。
■存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)對(duì)象,其名稱必須遵守標(biāo)識(shí)符命名規(guī)
則。
■不能將CREATEPROCEDURE語(yǔ)句與其它SQL語(yǔ)句
組合到單個(gè)批處理中。
■創(chuàng)建存儲(chǔ)過(guò)程時(shí),應(yīng)指定所有輸入?yún)?shù)和向調(diào)用過(guò)程或
批處理返回的輸出參數(shù)、執(zhí)行數(shù)據(jù)庫(kù)操作的編程語(yǔ)句和返
回至調(diào)用過(guò)程或批處理以表明成功或失敗的狀態(tài)值。
11
9.2創(chuàng)建管理簡(jiǎn)單的存儲(chǔ)過(guò)程
9.2.1無(wú)參存儲(chǔ)過(guò)程的創(chuàng)建
922無(wú)參存儲(chǔ)過(guò)程的執(zhí)行
9.2.3查看存儲(chǔ)過(guò)程
9.2.4修改存儲(chǔ)過(guò)程
9.2.5編譯存儲(chǔ)過(guò)程
9.2.6刪除存儲(chǔ)過(guò)程
12
9.2.2無(wú)參存儲(chǔ)過(guò)程的執(zhí)行
對(duì)存儲(chǔ)在服務(wù)器上的存儲(chǔ)過(guò)程,可以使用EXECUTE
命令或其名稱執(zhí)行它,其語(yǔ)法格式如下:
EXEC[UTE]procedure_name
對(duì)上例的存儲(chǔ)過(guò)程pr_searchorddate的執(zhí)行語(yǔ)句如下:
EXECUTEpr_searchorddate
13
9.2創(chuàng)建管理簡(jiǎn)單的存儲(chǔ)過(guò)程
9.2.1無(wú)參存儲(chǔ)過(guò)程的創(chuàng)建
9.2.2無(wú)參存儲(chǔ)過(guò)程的執(zhí)行
923查看存儲(chǔ)過(guò)程
9.2.4修改存儲(chǔ)過(guò)程
9.2.5編譯存儲(chǔ)過(guò)程
9.2.6刪除存儲(chǔ)過(guò)程
14
z
923查看存儲(chǔ)過(guò)程、
L使用對(duì)象資源管理器查看如M超
2.使用系統(tǒng)存儲(chǔ)過(guò)程查看存儲(chǔ)過(guò)程信息
在SQLServer中,可以使用sp_helptext、
sp_depends、sp_help等系統(tǒng)存儲(chǔ)過(guò)程來(lái)查看存儲(chǔ)過(guò)程的
不同信息。
1)使用sp_helptext查看存儲(chǔ)過(guò)程的文本信息.
其語(yǔ)法格式為:sp_helptext存儲(chǔ)過(guò)程名
2)使用sp_depends查看存儲(chǔ)過(guò)程的相關(guān)性.
其語(yǔ)法格式為:sp_depends存儲(chǔ)過(guò)程名
3)使用sp_help查看存儲(chǔ)過(guò)程的一般信息.
其語(yǔ)法格式為:sp_help存儲(chǔ)過(guò)程名
15
9.2創(chuàng)建管理簡(jiǎn)單的存儲(chǔ)過(guò)程
9.2.1無(wú)參存儲(chǔ)過(guò)程的創(chuàng)建
9.2.2無(wú)參存儲(chǔ)過(guò)程的執(zhí)行
9.2.3查看存儲(chǔ)過(guò)程
924修改存儲(chǔ)過(guò)程
9.2.5編譯存儲(chǔ)過(guò)程
9.2.6刪除存儲(chǔ)過(guò)程
16
z
9.2.4修改存儲(chǔ)過(guò)程
修改存儲(chǔ)過(guò)程語(yǔ)法格式為:
ALTERPROC[DURE]procedure_name
[{?parameterdata_type}
[=default][OUTPUT][,...n]
[WITH{RECOMPILE|ENCRYPTION|
RECOMPILE,ENCRYPTION}]
AS
Sql_statement
17
z
9.2.4修改存儲(chǔ)過(guò)程
例14:修改存儲(chǔ)過(guò)程prjsearchempL查詢出authors表
state字段為某個(gè)州的員工信息。
其程序清單如下:
ALTERPROCpr_searchempl
@statechar(2)
As
Select*
Fromauthors
Wherestate=@state
GO
18
9.2創(chuàng)建管理簡(jiǎn)單的存儲(chǔ)過(guò)程
9.2.1無(wú)參存儲(chǔ)過(guò)程的創(chuàng)建
9.2.2無(wú)參存儲(chǔ)過(guò)程的執(zhí)行
9.2.3查看存儲(chǔ)過(guò)程
9.2.4修改存儲(chǔ)過(guò)程
9.2.5編譯存儲(chǔ)過(guò)程
9.2.6刪除存儲(chǔ)過(guò)程
19
925編譯存儲(chǔ)過(guò)程
在我們使用了一次存儲(chǔ)過(guò)程后,可能會(huì)因?yàn)槟承┦?/p>
必須向表中新增加數(shù)據(jù)列或者為表新添加索引,從而改變了
數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)。這時(shí),、需要對(duì)存儲(chǔ)過(guò)程進(jìn)行重新編譯,
SQLServer提侯三種重新編譯存偏過(guò)超的方法:
1、在建立存儲(chǔ)過(guò)程時(shí)設(shè)定重新編譯
語(yǔ)法格式:CREATEPROCEDUREprocedure_name
WITHRECOMPILE-
ASsql_statement
2、在執(zhí)行存儲(chǔ)過(guò)程前設(shè)定重編譯
語(yǔ)法格式:EXECUTEprocedure_name
WITHRECOMPILE-
3、通過(guò)使用系統(tǒng)存儲(chǔ)過(guò)程設(shè)定重編譯
語(yǔ)法格式為:EXECsp_recompileOBJECT
20
9.2創(chuàng)建管理簡(jiǎn)單的存儲(chǔ)過(guò)程
9.2.1無(wú)參存儲(chǔ)過(guò)程的創(chuàng)建
9.2.2無(wú)參存儲(chǔ)過(guò)程的執(zhí)行
9.2.3查看存儲(chǔ)過(guò)程
9.2.4修改存儲(chǔ)過(guò)程
9.2.5編譯存儲(chǔ)過(guò)程
926刪除存儲(chǔ)過(guò)程
21
z
926刪除存儲(chǔ)過(guò)程1
1.使用SSMS對(duì)象資源管理器刪除存儲(chǔ)過(guò)程
2.使用DROPPROCEDURE語(yǔ)句刪除存儲(chǔ)過(guò)程
DROPPROCEDURE語(yǔ)句可以一次從當(dāng)前數(shù)據(jù)庫(kù)中將
個(gè)或多個(gè)存儲(chǔ)過(guò)程或過(guò)程組刪除,其語(yǔ)法格式如下:
DROPPROCEDURE存儲(chǔ)過(guò)程名稱[,n]
例15:刪除存儲(chǔ)過(guò)程pjsearchempl
USEPUBS
GO
DROPPROCEDUREpr_searchempl
GO
22
926刪除存儲(chǔ)過(guò)程
例16:建立一個(gè)帶參的存儲(chǔ)過(guò)程于刪除PUBS凌
sales表中stojid為某某值(如663805)的所有記錄。
實(shí)現(xiàn)的T-SQL語(yǔ)句:
USEpubs
GO
CREATEPROCdeletesales
@stor_idchar(4)
AS
DELETEsales
WHEREstorjd=@storjd
GO
23
9.2.6刪除存儲(chǔ)過(guò)程
存儲(chǔ)過(guò)程的執(zhí)行如下:
Execdeletesales'6380’
24
第9章存儲(chǔ)過(guò)程
9.1存儲(chǔ)過(guò)程概述
9.2創(chuàng)建管理簡(jiǎn)單存儲(chǔ)過(guò)程
9.3創(chuàng)建管理帶參的存儲(chǔ)過(guò)程
9.4其他存儲(chǔ)過(guò)程
25
9.3創(chuàng)建管理帶參的存儲(chǔ)過(guò)程
931創(chuàng)建帶參存儲(chǔ)過(guò)程的語(yǔ)法
9.3.2創(chuàng)建/執(zhí)行帶輸入?yún)?shù)的存儲(chǔ)過(guò)程
9.3.3創(chuàng)建/執(zhí)行帶輸出參數(shù)的存儲(chǔ)過(guò)程
9.3.4存儲(chǔ)過(guò)程的返回值
26
931創(chuàng)建帶參存儲(chǔ)過(guò)程的語(yǔ)法
1)語(yǔ)法格式如下:
CREATEPROC[DURE]procedure_name
[{?parameterdatatype}
[=default][OUTPUT][,...n]
[WITH{RECOMPILE|ENCRYPTION|
RECOMPILE,ENCRYPTION}]
AS
Sql_statement
27
931創(chuàng)建帶參存儲(chǔ)過(guò)程的語(yǔ)法
2)語(yǔ)法注釋:
parameter:存儲(chǔ)過(guò)程中的輸入和輸出參數(shù)。
datatype:參數(shù)的數(shù)據(jù)類(lèi)型。
OUTPUT:表明參數(shù)是返回參數(shù)。該選項(xiàng)的值可以返回
給EXEC[UTE]。
28
9.3創(chuàng)建管理帶參的存儲(chǔ)過(guò)程
9.3.1創(chuàng)建帶參存儲(chǔ)過(guò)程的語(yǔ)法
932創(chuàng)建/執(zhí)行帶輸入?yún)?shù)的存儲(chǔ)過(guò)程
9.3.3創(chuàng)建/執(zhí)行帶輸出參數(shù)的存儲(chǔ)過(guò)程
9.3.4存儲(chǔ)過(guò)程的返回值
29
燈”譴/熱便即整數(shù)的存儲(chǔ)
例2:在PUBS數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)存儲(chǔ)過(guò)程pr_search黜曲,
查詢出authors表中state字段為某個(gè)州且姓中包含某字符
串的所有的員工信息。
CREATEPROCpr_searchempl
@statechar(2),@strvarchar(40)
As
Select*
Fromauthors
Wherestate=@stateandau_lnamelike'%'+@str+'%'
30
叫”譴/執(zhí)行帶輸入?yún)?shù)的存儲(chǔ)過(guò)
語(yǔ)法格式如下:
[[EXEC[UTE]]
{[@return_status=]{procedure_name}
[[@parameter=]{value|@variable[OUTPUT]|
[DEFAULT]][,…n]
[WITHRECOMPILE]
對(duì)上例的存儲(chǔ)過(guò)程pr_searchempl的執(zhí)行語(yǔ)句如下:
EXECUTEpr_searchempl'CA'Jhi'
31
燈”譴/熱便即整數(shù)的存儲(chǔ)
例3:查詢出northwind數(shù)據(jù)庫(kù)中城市值為某某值并_^^
傭時(shí)間在某某日期之后的所有員工的基本信息。
實(shí)現(xiàn)的T-SQL語(yǔ)句:
USEnorthwind
GO
CREATEPROCp_getEmployee
@citynvarchar(15),
@hiredatedatetime
AS
SELECT*FROMemployeesWHEREcity=@cityAND
hiredate>=@hiredate
GO
32
"2J煙熱紅壁郵力數(shù)的存儲(chǔ)甯了
執(zhí)行帶輸入?yún)?shù)的存儲(chǔ)過(guò)程
按位置傳遞參數(shù)值
在執(zhí)行存儲(chǔ)過(guò)程的語(yǔ)句中,直接給出參數(shù)的值。當(dāng)有
多個(gè)參數(shù)時(shí),給出的參數(shù)的順序與創(chuàng)建執(zhí)行存儲(chǔ)過(guò)程的
語(yǔ)句中的參數(shù)的順序一致,即參數(shù)傳遞的順序就是參數(shù)
定義的順序。
通過(guò)參數(shù)名傳遞參數(shù)值
在執(zhí)行存儲(chǔ)過(guò)程的語(yǔ)句中,使用【參數(shù)名=參數(shù)值】的
形式給出參數(shù)值。其優(yōu)點(diǎn)是參數(shù)可以以任意順序給出。
33
"2J煙熱紅壁郵滲數(shù)的存儲(chǔ)過(guò)怪
在輸入?yún)?shù)中使用默認(rèn)值,
在執(zhí)行存儲(chǔ)過(guò)程p_getEmployee時(shí),如果沒(méi)有指定
參數(shù),則系統(tǒng)運(yùn)行就會(huì)出錯(cuò);此時(shí)如果希望在執(zhí)行時(shí)不
給出參數(shù)也能正確運(yùn)行,
則在創(chuàng)建存儲(chǔ)過(guò)程時(shí)給輸入?yún)?shù)指定默認(rèn)值。
34
"2J煙熱紅壁郵滲數(shù)的存儲(chǔ)主
按位置傳遞參數(shù)值
EXECp_getEmployeeilondon,/1994-1-15
通過(guò)參數(shù)名傳遞參數(shù)值
EXECp_getEmployee
@city='london',@hiredate="1994-1-1,
或
EXECp_getEmployee
@hiredate="1994-1-1',@city='london'
35
"2J悶熱伊郵力數(shù)的存儲(chǔ)過(guò)怪一
例4:對(duì)存儲(chǔ)過(guò)程p_getEmployee進(jìn)行修改,指定城市默認(rèn)
值為L(zhǎng)ondon,一指定雇傭日期為1990年1月1日。
USEnorthwind
GO
ALTERPROCp_getEmployee
@citynvarchar(15)=,london,,
@hiredatedatetime=,1990-1-1J
AS
SELECT*FROMemployeesWHEREcity=@cityAND
hiredate>=@hiredate
GO
EXECp_getEmployee
36
9.3創(chuàng)建管理帶參的存儲(chǔ)過(guò)程
9.3.1創(chuàng)建帶參存儲(chǔ)過(guò)程的語(yǔ)法
9.3.2創(chuàng)建/執(zhí)行帶輸入?yún)?shù)的存儲(chǔ)過(guò)程
933創(chuàng)建/執(zhí)行帶輸出參數(shù)的存儲(chǔ)過(guò)程
9.3.4存儲(chǔ)過(guò)程的返回值
37
23巨劍建/熱什贊狗釁數(shù)的存儲(chǔ)過(guò)X
例5:在PUBS數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)存儲(chǔ)過(guò)程pr_titleprice,
統(tǒng)計(jì)出titles表中pub_id字段為某編號(hào)的書(shū)籍總價(jià)格。
CREATEPROCprjitleprice
@pub_idchar(4),@spricemoneyoutput
As
Select@sprice=sum(price)
Fromtitles
Wherepub_id=@pub_id
存儲(chǔ)過(guò)程的執(zhí)行:
declare@ssmoney
execpr_titleprice'0877',@ssoutput
select@ssas總價(jià)格
3
933創(chuàng)建/執(zhí)行帶輸出參數(shù)的存儲(chǔ)過(guò)
例6:創(chuàng)建一個(gè)存儲(chǔ)過(guò)程p_getCguntEmplo)fees,
開(kāi)nothwind藪據(jù)庫(kù)員工裹平雇傭日麗卷某某時(shí)間之后的
員工的個(gè)藪。
實(shí)現(xiàn)的T-SQL語(yǔ)句:
USEnorthwind
GO
CREATEPROCp_getCountEmployees
@hiredatedatetime=,1990-1-1\
@countintOUTPUT
AS
SELECT@count=count(*)FROMemployeesWHERE
hiredate>=@hiredate
GO
39
存儲(chǔ)過(guò)程的調(diào)用
sp_helppr_check_manager
go
sp_helptextpr_check_manager
go
sp_dependspr_check_manager
llllllllllllllllllllllllllllllllllllllllll
sp_helppr_check_manager
EXECsp_helptextpr_check_manager
EXECsp_dependspr_check_manager
llllllllllllllllllllllllllllllllllllllllllll
40
在數(shù)據(jù)庫(kù)工具中,架構(gòu)也指描述架構(gòu)或數(shù)據(jù)庫(kù)中的對(duì)象的
目錄信息。
usebb
ifnotexists
(
select,
fromsys.schemassjoinsys.tablestons.schemajd
=t.schemajd
where='dbo'and='t_WorkerMoney'
)
41
933創(chuàng)建/執(zhí)行帶輸出參數(shù)的存儲(chǔ)過(guò)
調(diào)用存儲(chǔ)過(guò)程的T-SQL語(yǔ)句:
DECLARE@ecountint
EXECp_getCountEmployees'1993-1-1'Recount
OUTPUT
SELECT,員工個(gè)數(shù)為:'+str(@ecount)
GO
42
9.3創(chuàng)建管理帶參的存儲(chǔ)過(guò)程
9.3.1創(chuàng)建帶參存儲(chǔ)過(guò)程的語(yǔ)法
9.3.2創(chuàng)建/執(zhí)行帶輸入?yún)?shù)的存儲(chǔ)過(guò)程
9.3.3創(chuàng)建/執(zhí)行帶輸出參數(shù)的存儲(chǔ)過(guò)程
934存儲(chǔ)過(guò)程的返回值
43
934存儲(chǔ)過(guò)程的返回值
存儲(chǔ)過(guò)程在執(zhí)行后都會(huì)返回一個(gè)整型值。如果執(zhí)行成功,
則返回0;否則返回到?99之間的隨機(jī)數(shù),也可以使用
RETURN語(yǔ)句來(lái)指定一個(gè)存儲(chǔ)過(guò)程的返回值。
44
934存儲(chǔ)過(guò)程的返回值
例7:在northwind數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,返回產(chǎn)品表
中的所有產(chǎn)品的庫(kù)存量。
createprocprjier
as
begin
declare@fanhuizhiint
select@fanhuizhi=sum(unitsinstock)
fromproducts
return@fanhuizhi
end
45
934存儲(chǔ)過(guò)程的返回值
接受這個(gè)返回值必須要用變量來(lái)接收declare
@jieshouzhiint
exec@jieshouzhi=pr_lier
print@jieshouzhi
46
934存儲(chǔ)過(guò)程的返回值
上例中返回的值也可以用output參數(shù)來(lái)返回,可以將上
例的存儲(chǔ)過(guò)程改寫(xiě)為:
createprocpr_lier_2
@fanhuizhiintoutput
as
begin
select@fanhuizhi=sum(unitsinstock)
fromproducts
end
47
z
934存儲(chǔ)過(guò)程的返回值
接收output的返回值也必須要用變量,如:
declare@jieshouzhiint
execpr_lier_2@jieshouzhioutput
print@jieshouzhi
注意:
1)return返回的是整數(shù),output可以返回任何數(shù)據(jù)。
2)如果讓return返回非整數(shù)值,在創(chuàng)建存儲(chǔ)過(guò)程時(shí)不會(huì)
出錯(cuò),但是運(yùn)行存儲(chǔ)過(guò)程時(shí)將會(huì)出錯(cuò)。
48
存儲(chǔ)過(guò)程案例
例8:在PUBS數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)用戶表UserMembe7,并
在此表中錄入相應(yīng)記錄,用戶表的表結(jié)構(gòu)如下所示:
列名|數(shù)據(jù)類(lèi)型|長(zhǎng)度|允許空I
用戶名varchar50
?
密碼varchar50
「
性別char2
?
電話varchar50
e_mailvarchar50
原甦住址varchar|二|50
49
存儲(chǔ)過(guò)程案例
例9:在PUBS數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)帶參數(shù)的存儲(chǔ)過(guò)程
SelectUser,查詢出用戶表UserMember中是否存在某
用戶,如果不存在,則返回值為1,否則則查詢?cè)撚脩舻?/p>
密碼是否正確,如不正確,則返回值為2,否則返回值為
0。
50
存儲(chǔ)過(guò)程案例
createprocselectuser
@usernamevarchar(20),@passvarchar(20)
as
if@usernamenotin(select用戶名fromusermember)
return(1)
elseifexists(select*fromusermember
where用戶名=@usernameand密碼=@pass)
return(O)
elsereturn(2)
51
z
存儲(chǔ)過(guò)程案例
執(zhí)行存儲(chǔ)過(guò)程語(yǔ)句如下:
Declare@fanint
Exec@fan=selectuser£aaa7aaa
If@fan=O
Print'用戶名和密碼都正確,
If@fan=1
Print,用戶名不存在,
If@fan=2
Print'用戶名存在,密碼不正確,
52
課堂練習(xí)
在學(xué)生數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)學(xué)生用戶表StudentMem唯r,
并在此表中錄入相應(yīng)記錄。
列名|數(shù)據(jù)類(lèi)型1長(zhǎng)度1允許空
學(xué)號(hào)char8
密碼varchar20
性別char2y
varchar20?
族系電話
?varchaijjj20
在學(xué)生數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)帶參數(shù)的存儲(chǔ)過(guò)程SelectStudent,
查詢出學(xué)生用戶表StudentMember中是否存在某學(xué)生的信息,
如果不存在,則返回值為-1,否則則查詢?cè)搶W(xué)生的登錄密碼是
否正確,如不正確,則返回值為-2,否則返回值為0。
53
存儲(chǔ)過(guò)程案例
例10:建立一個(gè)帶參的存儲(chǔ)過(guò)程,用于向PUBS數(shù)據(jù)庫(kù)中
的publishers表中添加一條記錄,在添加記錄前先查看是
否存在此出版社編號(hào)(pub_id),如不存在則插入該條記
錄信息,存儲(chǔ)過(guò)程返回值為0,如已存在此出版社編號(hào),則
不進(jìn)行插入記錄操作,存儲(chǔ)過(guò)程返回值為測(cè)試記錄
為:0001\9清華大學(xué)出版社,「北京,,nul『中
國(guó)'。
54
存儲(chǔ)過(guò)程案例
實(shí)現(xiàn)的T?SQL語(yǔ)句:
USEpubs
GO
CREATEPROCInsertPublishers
@Pub_ldchar(4),
@pub_namevarchar(40),
@cityvarchar(20),
@statechaK2),
?countryvarchar(30)
55
存儲(chǔ)過(guò)程案例、一
AS
IFEXISTS(SELECT*FROMpublishersWHERE
pubjd=@pub_id)
Return-1
ELSE
BEGIN
INSERTPublishers(PubJd,pub_name,city,state,
country)一一
VALUES(@PubJd,@pub_name,@city,@state,@country)
IF@@ERROR=O—
RETURN0
ELSE
RETURN-9
END
GO
存儲(chǔ)過(guò)程案例
存儲(chǔ)過(guò)程的執(zhí)行如下:
DECLARE@resultint
Exec@result=lnsertPublishers'9901','清華大學(xué)
出版社,,,北京,中國(guó),
IF@result=0
PRINT'記錄插入成功,
IF@result=-1
PRINT,出版社編號(hào)已存在,記錄重復(fù)!,
IF@result=-9
PRINT,出版社編號(hào)違反檢查約束,請(qǐng)重新輸入!,
GO
57
存儲(chǔ)過(guò)程案例
例11:在PUBS數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)帶參數(shù)的存儲(chǔ)過(guò)程
InsertUserMember,接受用戶的注冊(cè)信息,首先查詢出用
戶表UserMember中是否存在該用戶,如果存在,則返回值
為否則將該信息插入到該表中,如果插入記錄成功則返
回值為0,否則返回值為?2。
58
存儲(chǔ)過(guò)程案例
createprocInsertUserMember
@usernamevarchar(50),@pwdvarchar(50),
@sexchar(2尸男9,@phonevarchar(50)=null,
@emailvarchar(50)=null,@address
varchar(50)=null
as
ifexists(select*fromusermemberwhere用戶名
=@username)
return-1
59
存儲(chǔ)過(guò)程案例
else
begin
insertintousermember
values(@username,@pwd,@sex,@phone,
@email,@address)
if@@error=0
return0
else
return-2
end
go
60
存儲(chǔ)過(guò)程案例
存儲(chǔ)過(guò)程的執(zhí)行語(yǔ)句如下:▼
declare@fanint
exec@fan=lnsertllserMember
4cc,/cc,,default/86822555,/a@126.com,,,長(zhǎng)春
I
if@fan=-1
print'用戶名已經(jīng)存在,
if@fan=O
print'插入數(shù)據(jù)成功'
if@fan=-2
print'插入數(shù)據(jù)失敗'
61
z
課堂練習(xí)
在學(xué)生數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)帶參數(shù)的存儲(chǔ)過(guò)程Insertstudent,
接受學(xué)生的注冊(cè)信息,首先查詢出學(xué)生用戶表
StudentMember中是否存在該學(xué)生,如果存在,則返回值為
-1,否則將該信息插入到該表中,如果插入記錄成功則返回
值為0,否則返回值為?2。
62
存儲(chǔ)過(guò)程案例
例12:建立一個(gè)帶參的存儲(chǔ)過(guò)程updatesales,用于修改
PUBS數(shù)據(jù)庫(kù)sales表中ord_date的值為某某(4口'1994-9-
14,)并且titlejd為某某值(如BU1032,)的qty字段值,
修改其值為輸入的數(shù)值(如25)o
63
存儲(chǔ)過(guò)程案例
USEpubs
GO
CREATEPROCupdatesales
@ord_datedatetime,
@title_idvarchar(6),
@qtysmallint
AS
UPDATEsales
SETqty=@qty
WHEREord_date=?ord_dateANDtitle_id=@title_id
GO一一一一
存儲(chǔ)過(guò)程的執(zhí)行如下:
Execupdatesalesc1994-9-14\'BU1032\25
GO
64
存儲(chǔ)過(guò)程案例
例13:在pubs數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)帶參的存儲(chǔ)過(guò)程
updateusermember,接受用戶的信息修改,首先查詢出
用戶表usermemeber中是否存在該用戶名,并且密碼是否
正確,如果不正確,則返回(?1),否則可以修改用戶的
信息(用戶名不可以修改)。
65
Createprocupdateusermember
@usernamevarchar(50),@pwdvarchar(50),@sexchar(2),
?telephonevarchar(50),@addressvarchar(50)
as
Ifexists(select*fromusermemberwhere用戶名
=@usernameand密碼=@pwd)
Updateusermember
Set性別=@sex,電話=@telephone,^><^£iiE=@address
Where用戶名=@username
Elsereturn(-1)
Go
執(zhí)行存儲(chǔ)過(guò)程
Execupdateusermemberiyp,,,456123,,,dc,,
121212,/beijing,
66
z
課堂練習(xí)
在學(xué)生數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)帶參數(shù)的存儲(chǔ)過(guò)程
UpdateStudent,接受學(xué)生的信息修改,首先查詢出學(xué)生
用戶表StudentMember中是否存在該學(xué)號(hào),并且密碼是
否正確,如果不正確,則返回值為否則修改該學(xué)生的
其他信息(學(xué)號(hào)不可以修改)。
67
z
綜合練習(xí)L
例17:建立一個(gè)帶參的存儲(chǔ)過(guò)程p_getTotal,用于查詢
northwind數(shù)據(jù)庫(kù)orderdetails表中某產(chǎn)品的總銷(xiāo)量和總多肖售
金額,并將其值返回。
實(shí)現(xiàn)的T?SQL語(yǔ)句:
USEnorthwind
GO
CREATEPROCp_getTotal
@prod_idint,@total_quantityINTOUTPUT,@total_money
moneyOUTPUT
AS
SELECT@total_quantity=sum(quantity),
@total_money=sum(quantity*unitprice*(1-discount))
FROM[orderdetails]WHEREproductid=@prod_id
GO
z
綜合練習(xí)\
存儲(chǔ)過(guò)程的執(zhí)行如下:
DECLARE@t_quantityint,@t_moneymoney
EXECp_getTotal10,@t_quantityoutput,@t_money
output
PRINT'該產(chǎn)品總銷(xiāo)量為'+str(@t_quantity)
PRINT,該產(chǎn)品總金額為,+str(@t_money)
GO
69
第9章存儲(chǔ)過(guò)程
9.1存儲(chǔ)過(guò)程概述
9.2創(chuàng)建管理簡(jiǎn)單存儲(chǔ)過(guò)程
9.3創(chuàng)建管理帶參的存儲(chǔ)過(guò)程
9?4其他存儲(chǔ)過(guò)程
70
11.6案例中的存儲(chǔ)過(guò)程
1.創(chuàng)建一個(gè)加密過(guò)程
在student數(shù)據(jù)庫(kù)中,創(chuàng)建一個(gè)名稱為st_jiami的加密存儲(chǔ)過(guò)程,該過(guò)程用來(lái)查詢
一門(mén)課程也沒(méi)有選修的學(xué)生的學(xué)號(hào)與姓名。創(chuàng)建完成后,執(zhí)行該存儲(chǔ)過(guò)程。
USEstudent
GO
--如果存儲(chǔ)過(guò)程stjiami存在,將其刪除
IFEXISTS(SELECTnameFROMSYSOBJECTSWHEREname='stjiami'
ANDtype='P')
DROPPROCEDUREstjiami
GO
-建立一個(gè)加密的存儲(chǔ)過(guò)程
71
11.6案例中的存儲(chǔ)過(guò)程
CREATEPROCEDUREstjiami
“加密選項(xiàng)
WITHENCRYPTION
AS
SELECT學(xué)號(hào),姓名FROM學(xué)生
WHERE學(xué)號(hào)NOTIN(SELECT學(xué)號(hào)FROM課程注冊(cè))
GO
“執(zhí)行stjiami
EXECstjiami
GO
72
11.6案例中的存儲(chǔ)過(guò)程
在student數(shù)據(jù)庫(kù)中,創(chuàng)建一個(gè)帶參數(shù)的存儲(chǔ)過(guò)程st_chengjichaxun,該存儲(chǔ)過(guò)程用于當(dāng)
輸入任意一個(gè)成績(jī)時(shí),將從三個(gè)表(學(xué)生表、云程注冊(cè)表、課程表)中查詢出大于
或等于該成績(jī)的學(xué)生學(xué)號(hào)、姓名、課程名和課程成績(jī)。創(chuàng)建完成后,執(zhí)行該存儲(chǔ)過(guò)
程,查詢獲得學(xué)分的學(xué)生(即成績(jī)大于或等于60)。
USEstudent
GO
--如果存儲(chǔ)過(guò)程st_chengjichaxun存在,將其刪除
IFEXISTS(SELECTnameFROMSYSOBJECTSWHEREname='st_chengjichaxun'
ANDtype='P')
DROPPROCEDUREst_chengjichaxun
GO
73
11.6案例中的存儲(chǔ)過(guò)程
--創(chuàng)建一個(gè)帶參數(shù)的存儲(chǔ)過(guò)程st_chengjichaxun
CREATEPROCEDUREst_chengjichaxun@chengjitinyint
AS
SELECTA.學(xué)號(hào),A.姓名,C.課程名稱,B.成績(jī)FROM學(xué)生ASA
JOIN課程注冊(cè)ASBONA.學(xué)號(hào)二B.學(xué)號(hào)
JOIN課程ASCONB.課程號(hào)=C裸程號(hào)
WHEREB.成績(jī)>=@chengji
ORDERBYA.學(xué)號(hào)
GO
--執(zhí)行st_chengjichaxun,顯示獲的學(xué)分學(xué)生的學(xué)號(hào)、姓名、課程名和課程成績(jī)
EXECst_chengjichaxun60
GO
74
11.6案例中的存儲(chǔ)過(guò)程
在student數(shù)據(jù)庫(kù)中,創(chuàng)建一個(gè)存儲(chǔ)過(guò)程st_dkcjfx,當(dāng)任意輸入一個(gè)存在的西
程名稱時(shí),該存儲(chǔ)過(guò)程將統(tǒng)計(jì)出該門(mén)諫程的平均成績(jī)、最高成績(jī)和最低成
績(jī)。(本例題在執(zhí)行存儲(chǔ)過(guò)程時(shí),統(tǒng)計(jì)的是sqlserver2005課程的平均成
績(jī)、最高成績(jī)和最低成績(jī)。)
USEstudent
GO
--如果存儲(chǔ)過(guò)程st_dkcjfx存在,將其刪除
IFEXISTS(SELECTnameFROMSYSOBJECTSWHERE
name=,st_dkcjfx'ANDtype-P')
DROPPROCEDUREst_dkcjfx
GO
75
11.6案例中的存儲(chǔ)過(guò)程
--創(chuàng)建存儲(chǔ)過(guò)程st_dkcjfx
--定義一個(gè)輸入?yún)?shù)kechengming
--定義三個(gè)輸出參數(shù)avgchengji,maxchengji和minchengji,用于接受平均成績(jī),最高
成績(jī)和最低最績(jī)
CREATEPROCEDUREst_dkcjfx
@kechengmingvarchar(20),@avgchengjitinyintOUTPUT,
@maxchengjitinyintOUTPUT,@minchengjitinyintOUTPUT
AS
SELECT@avgchengji=AVG(成績(jī)),@maxchengji二MAX(成績(jī)),@minchengji二MIN(成
績(jī))
FROM課程注冊(cè)WHERE課程號(hào)IN
(SELECT課程號(hào)FROM課程WHERE課程名^=@kechengming)
GO
76
11.6案例中的存儲(chǔ)過(guò)程
--執(zhí)行存儲(chǔ)過(guò)程st_dkcjfx
USEstudent
GO
一聲明四個(gè)變量,用于保存輸入和輸出參數(shù)
DECLARE@kechengming1varchar(20)
DECLARE@avgchengji1tinyint
DECLARE@maxchengji1tinyint
DECLARE@minchengji1tinyint
--為輸入?yún)?shù)賦值
SELECT@kechengming1-SQLServer20051
--執(zhí)行存儲(chǔ)過(guò)程
EXECst_dkcjfx@kechengming1,@avgchengji1OUTPUT,
@maxchengji1OUTPUT,@minchengji1OUTPUT
77
11.6案例中的存儲(chǔ)過(guò)程
--顯示結(jié)果▼
SELECT@kechengming1AS課程名稱,@avgchengji1
AS平均成績(jī),
@maxchengji1AS最高成績(jī),@minchengji1AS最低成績(jī)
GO
78
7.3觸發(fā)器概述_____________V
觸發(fā)器是一種特殊類(lèi)型的存儲(chǔ)過(guò)程.它不同于前面介
紹過(guò)的存儲(chǔ)過(guò)程。(區(qū)別)觸發(fā)器主要是通過(guò)事件進(jìn)行觸發(fā)而
被執(zhí)行,而存儲(chǔ)過(guò)程可以通過(guò)存儲(chǔ)過(guò)程名字而被直接調(diào)用。
當(dāng)對(duì)某一表進(jìn)行如UPDATE,INSERT,DELETE<*#4^
時(shí),SQLServer就會(huì)自動(dòng)執(zhí)行觸發(fā)器所定義的SQL語(yǔ)句。從
而確保對(duì)數(shù)據(jù)的處理必須符合這些SQL語(yǔ)句定義的規(guī)則。
觸發(fā)器的主要作用就是其能夠?qū)崿F(xiàn)由主鍵和外鍵所不能
保證的參照完整性和數(shù)據(jù)的一致性。
除此之外,觸發(fā)器還有其他很多功能:
79
(1)強(qiáng)化約束W
觸發(fā)器能夠?qū)崿F(xiàn)比較復(fù)雜的約束。.
(2)跟蹤變化
觸發(fā)器可以偵測(cè)數(shù)據(jù)庫(kù)內(nèi)的操作,從而不允許數(shù)據(jù)庫(kù)
未經(jīng)許可的指定更新和變化。
(3)級(jí)聯(lián)運(yùn)行
觸發(fā)器可以偵測(cè)數(shù)據(jù)庫(kù)內(nèi)的操作,并自動(dòng)地級(jí)聯(lián)影響整
個(gè)數(shù)據(jù)庫(kù)的各項(xiàng)內(nèi)容。例如,某個(gè)表上創(chuàng)建了觸發(fā)器,
在另外一個(gè)表進(jìn)行數(shù)據(jù)操作(如刪除、更新、插入)時(shí)可
以導(dǎo)致該表上的觸發(fā)器被觸至O
(4)觸發(fā)器可以調(diào)用存儲(chǔ)過(guò)程
為了響應(yīng)數(shù)據(jù)庫(kù)更新,觸發(fā)器可以調(diào)用一個(gè)或多
個(gè)存儲(chǔ)過(guò)程。由此可見(jiàn),觸發(fā)器可以解決高級(jí)形式的業(yè)
務(wù)規(guī)則。
80
SQLServer2000支持兩種類(lèi)型的觸發(fā)器:.
AFTERBXW1NSTEAD19FBO^-------------七
1.AFTER觸發(fā)器在觸發(fā)操作(INSERT,UPDATE
DELETE)后和處理完任何約束后激發(fā)。且只能在表上定義。
可以為同一操作定義多個(gè)觸發(fā)器??梢远x哪一個(gè)觸
發(fā)器被最先觸發(fā),哪一個(gè)被最后觸發(fā),通常使用系統(tǒng)過(guò)程
sp_settriggerorder來(lái)完成止匕任務(wù)。
sp_settriggerorder'ti_Storage_MoveDetair,'first','insert
I
2.INSTEADOF觸發(fā)器代替觸發(fā)動(dòng)作進(jìn)行激發(fā),并
在處理約束之前激發(fā)。
既可以在表上定義INSTEADOF觸發(fā)器,也可
以在視圖上定義INSTEADOF觸發(fā)器,但對(duì)同一操作只能定
義一個(gè)INSTEADOF觸發(fā)器。
總結(jié):通過(guò)或可以控制觸發(fā)器何時(shí)被觸發(fā)。
afterinsteadof81
只要求掌握after觸發(fā)器。
回顧:
1.存儲(chǔ)過(guò)程和觸發(fā)器在執(zhí)行上的區(qū)別。
2.觸發(fā)器分為三類(lèi):insert觸發(fā)器,update觸
發(fā)器和delete觸發(fā)器。
82
7.4觸發(fā)器原理(inserted表和deleted表)V
觸發(fā)器被觸發(fā)后,可以產(chǎn)生inserted表或deleted表。
這兩個(gè)表是邏輯表,不是存儲(chǔ)在數(shù)據(jù)庫(kù)中,而是存儲(chǔ)在
內(nèi)存中,并且這兩個(gè)表是由系統(tǒng)管理的,是只讀的,因
此用戶不能向這兩個(gè)表寫(xiě)入內(nèi)容但可以引用表中的數(shù)
據(jù)。
這兩個(gè)表是動(dòng)態(tài)駐留在內(nèi)存中,當(dāng)觸發(fā)器工作完成,這
兩個(gè)表也被刪除。
這兩個(gè)表的結(jié)構(gòu)總是與該觸發(fā)器作用的表有相同的表
結(jié)構(gòu)。
83
73?1inserted表
根據(jù)執(zhí)行的操作類(lèi)型(三類(lèi)操作)的不同,會(huì)觸發(fā)不同
的觸發(fā)器T不同的觸發(fā)器會(huì)創(chuàng)建不回的邏輯表_____
(inserted表和deleted表),可能只創(chuàng)建一個(gè),也可能兩
個(gè)都創(chuàng)建。
下表說(shuō)明了在進(jìn)行何種操作時(shí),觸發(fā)器創(chuàng)建哪些表。
觸發(fā)器創(chuàng)建的表:
觸發(fā)器類(lèi)型—?jiǎng)?chuàng)建inserted表一創(chuàng)建deleted表一
INSERT是否
UPDATE是是
DELETE否是
應(yīng)當(dāng)注意的是:inserted表和deleted表只能被創(chuàng)建
它們的
觸發(fā)器引用inserted表和deleted表的范圍僅限于該
觸發(fā)器。
inserted表響表中插入一條記錄時(shí),相應(yīng)的insert
觸發(fā)器創(chuàng)建一個(gè)inserted表,該表映射了與該觸發(fā)器作用
的表的結(jié)構(gòu)。例如當(dāng)用戶向?qū)W生表中插入記錄時(shí),觸發(fā)
器使用學(xué)生表的歹I結(jié)構(gòu)創(chuàng)建inserted表,插入到學(xué)生表
的那些新記錄,相應(yīng)的也出現(xiàn)在inserted表中(重要知識(shí)
點(diǎn))。
85
7.4.2deleted表
當(dāng)執(zhí)行一條DELETE語(yǔ)句時(shí),從表中刪除的每一行都包含I
在deleted表中vH列??趧h除學(xué)生表中的學(xué)號(hào)為附記
錄,那么學(xué)生表中找不到該條記錄,但是在deleted
表中可以找到。
update操作相當(dāng)于執(zhí)行了delete操作和insert操作。
被UPDATE語(yǔ)句觸發(fā)的觸發(fā)器創(chuàng)建兩個(gè)表:inserted
表和deleted表。deleted表和inserted表分另4包含基
本表中數(shù)據(jù)的“前后”快照。
例如:假設(shè)用戶執(zhí)行下面的Transact-SQL語(yǔ)句:
UPDATEtitlesSETprice=30WHEREtitle=’數(shù)據(jù)結(jié)
構(gòu)'
update操作相當(dāng)于刪除一條舊記錄插入一條新記錄。
語(yǔ)句執(zhí)行時(shí),觸發(fā)器產(chǎn)生inserted表和deleted表。
Deleted表中存放的是數(shù)據(jù)結(jié)構(gòu)那本書(shū)的舊記錄,即價(jià)
格為20的舊記錄;而inserted表中貝I是數(shù)據(jù)結(jié)廟那本
書(shū)的新記錄,即價(jià)格為30的新記錄。86
7.5觸發(fā)器的創(chuàng)建
在SQLServer中可以使用EnterpriseManager
和Transac_SQL來(lái)創(chuàng)建觸發(fā)器。創(chuàng)建觸發(fā)器應(yīng)該考慮以
下幾個(gè)問(wèn)題:
①CREATETRIGGER語(yǔ)句必須是批處理中的第一個(gè)語(yǔ)
句。
②觸發(fā)器的名稱必須遵循標(biāo)識(shí)符的命名規(guī)則。
③只能在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建觸發(fā)器。
④在觸發(fā)器中,下面的T-SQL語(yǔ)句是不能使用的:
ALTERDATABASECREATEDATABASE
DISKINITDISKRESIZE
DROPDATABASELOADDATABASE
LOADLOGRESTOREDATABASE
87
使用Transac_SQL來(lái)創(chuàng)建觸發(fā)器
(在客戶端創(chuàng)建,要求用戶擁有此權(quán)限)
觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,它可以在表或者視圖上
創(chuàng)建,當(dāng)對(duì)表或者視圖進(jìn)行三類(lèi)操作時(shí)自動(dòng)執(zhí)行觸發(fā)器。
創(chuàng)建觸發(fā)器的語(yǔ)法如下:
CREATETRIGGERtrigger-name
ON{table|view}[WITHENCRYPTION]
FOR{[DELETE][,][INSERT][,][UPDATE]}
AS
sql_statement
88
7.5.2使用INSERT觸發(fā)器
例1:往學(xué)生表插入一條記錄,顯示插入成功的信息。
createtrigger插入on學(xué)生
forinsert
as
print'恭喜你,插入記錄成功!'
insertinto學(xué)生(學(xué)院,姓名,學(xué)號(hào),班級(jí))
values('計(jì)算機(jī)'/劉萍','992001',2)
89
z
1L8觸發(fā)器的創(chuàng)建執(zhí)行綜述
在進(jìn)行觸發(fā)器的基本操作之前,介紹兩張?zhí)厥獾呐R時(shí)表,
分別是inserted表和deleted表。這兩張表都存在于高速
緩存中。用戶可以使用這兩張臨時(shí)表來(lái)檢測(cè)某些修改操作
所產(chǎn)生的效果。例如,可以使用SELECT語(yǔ)句來(lái)檢查
INSERT和UPDATE語(yǔ)句執(zhí)行的插入操作是否成功,觸發(fā)
器是否被這些語(yǔ)句觸發(fā)等。但是不允許用戶直接修改
inserted表和deleted表中數(shù)據(jù)。
90
z
11.8觸發(fā)器的創(chuàng)建執(zhí)行
1.觸發(fā)器的基本操作—?jiǎng)?chuàng)建
例:在student數(shù)據(jù)庫(kù)中,為“班級(jí)”表建立一個(gè)名為
del_banji的DELETE觸發(fā)器,其作用是當(dāng)刪
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 20精彩極了“和”糟糕透了(教學(xué)設(shè)計(jì))-2024-2025學(xué)年統(tǒng)編版語(yǔ)文五年級(jí)上冊(cè)
- 醫(yī)療器械生產(chǎn)質(zhì)量管理預(yù)案
- 三農(nóng)產(chǎn)品種養(yǎng)殖技術(shù)培訓(xùn)手冊(cè)
- 基于“互聯(lián)網(wǎng)+醫(yī)院-家庭”雙向聯(lián)動(dòng)模式在冠心病PCI術(shù)后患者康復(fù)中的應(yīng)用分析
- 本科畢業(yè)論文完整范文(滿足查重要求)高校學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 6 飛向藍(lán)天的恐龍 教學(xué)設(shè)計(jì)-2023-2024學(xué)年語(yǔ)文四年級(jí)下冊(cè)統(tǒng)編版
- 5《協(xié)商決定班級(jí)事務(wù)》第一課時(shí)(教學(xué)設(shè)計(jì))2024-2025學(xué)年統(tǒng)編版道德與法治五年級(jí)上冊(cè)
- 共享辦公空間運(yùn)營(yíng)與管理預(yù)案
- 拒絕校園欺凌守護(hù)美好青春
- 5 多樣的棲息地 教學(xué)設(shè)計(jì)-2023-2024學(xué)年六年級(jí)下冊(cè)科學(xué)蘇教版
- 2024年江西省中考地理試題(原卷版+解析版)
- 城市農(nóng)貿(mào)市場(chǎng)攤位租賃合同
- CHT 1024-2011 影像控制測(cè)量成果質(zhì)量檢驗(yàn)技術(shù)規(guī)程(正式版)
- 新概念英語(yǔ)第二冊(cè)-Lesson18-同步習(xí)題含答案
- 2024年3月江蘇海洋大學(xué)招考聘用專職輔導(dǎo)員和工作人員5人筆試參考題庫(kù)附帶答案詳解
- 《公路橋涵養(yǎng)護(hù)規(guī)范》(JTG5120-2021)
- 東來(lái)順牛羊肉培訓(xùn)
- 中考百日誓師大會(huì)-百日沖刺決戰(zhàn)中考-2024年中考百日誓師大會(huì)(課件)
- 非線粒體氧化體系講解課件
- 打鐵花非物質(zhì)文化遺產(chǎn)
- 初中八年級(jí)語(yǔ)文課件-桃花源記 全國(guó)公開(kāi)課一等獎(jiǎng)
評(píng)論
0/150
提交評(píng)論