Microsoft PowerPoint - sql2005_ch10.ppt

Similar documents
6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

untitled

投影片 1

Microsoft PowerPoint - sql2005_ch03.ppt

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘

Microsoft PowerPoint - sql2005_ch09.ppt

一 個 SQL Injection 實 例 的 啟 示 頁 2 / 6 因 此, 在 知 名 網 站 上 看 到 SQL Injection, 讓 人 驚 心, 卻 不 意 外 網 站 專 案 外 包 是 目 前 業 界 的 常 態, 而 在 價 格 取 勝 的 制 度 下, 低 價 得 標 的 S

untitled

untitled

01 SQL Server SQL Server 2008 SQL Server 6-1 SSIS SQL Server ( master ) ( msdb ) SQL Server ( master ) master 6-1 DTS sysadmin 6-1 sysa

<4D F736F F D20C9CFBAA3CAD0BCC6CBE3BBFAB5C8BCB6BFBCCAD4C8FDBCB6BFBCCAD4B4F3B8D95FBDA8D2E9B8E55F5F E646F63>

习题1

PowerPoint Presentation

導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式

数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护

Oracle Database 10g: SQL (OCE) 的第一堂課

Oracle高级复制冲突解决机制的研究

untitled

RUN_PC連載_12_.doc

3 Driver do Microsoft Access (*.mdb) hisdata IFIX 1.4

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

使用手冊

目錄... ivv...vii Chapter DETECT


致理技術學院資訊管理學系專題企劃書格式建議書

1 1 Excel VBA 說明 ( ) (_) STEP4 Excel 2 STEP5 A1 1 B2 2 C3 3 STEP6 A1 STEP7 > > 1-11

天津天狮学院关于修订2014级本科培养方案的指导意见

CC213

多層次傳銷與獎金系統

untitled

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

基于UML建模的管理管理信息系统项目案例导航——VB篇

上海市教育考试院关于印发新修订的

VB控件教程大全

ThreeDtunnel.doc

Chapter 00 導論

運算子多載 Operator Overloading

epub 61-2

目 錄 壹 實 務 專 題 製 作 競 賽 ( 複 賽 ) 實 施 計 畫 1 貳 實 務 專 題 製 作 競 賽 ( 複 賽 ) 參 選 作 品 一 覽 表 13 參 評 審 委 員 名 單 23 肆 活 動 照 片 25 伍 實 務 專 題 製 作 競 賽 ( 複 賽 ) 優 良 作 品 名 錄

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

Microsoft PowerPoint - VB14.ppt

使用SQL Developer

Excel VBA Excel Visual Basic for Application

软件测试(TA07)第一学期考试

0SQL SQL SQL SQL SQL 3 SQL DBMS Oracle DBMS DBMS DBMS DBMS RDBMS R DBMS 2 DBMS RDBMS R SQL SQL SQL SQL SELECT au_fname,au_ lname FROM authors ORDER BY

Oracle 4

封面-12

123

四川省普通高等学校

PowerPoint Presentation

2015 TB-1-06.indd

64 [ 46 ] (p297) 1924 :? [ 47 ] (p570) ; ; ; ; ; ; ; ; ; ; ; [ 11 ]; [ 35 ] [ 49 ] [ 32 ] ( ) [ 48 ] (p 425) [ 50 ] (p 670 6

AutoCAD 用戶如何使用 ArchiCAD

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

Microsoft PowerPoint - SAGE 2010

第 一 节 认 识 自 我 的 意 义 一 个 人 只 有 认 识 自 我, 才 能 够 正 确 地 认 识 到 自 己 的 优 劣 势, 找 出 自 己 的 职 业 亮 点, 为 自 己 的 顺 利 求 职 推 波 助 澜 ; 一 个 人 只 有 认 识 自 我, 才 能 在 求 职 中 保 持

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 任 何 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工

Microsoft Word - 1-3陳詠琳-近代..

投稿類別:商業類

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆

untitled

ebook 165-5

epub 61-6

<4D F736F F D20CAB5D1E9CAD2B9DCC0EDC6BDCCA856342E315FD1A7C9FAD3C3BBA7B2D9D7F7D6B8C4CF2E646F63>

爱玩科技合作白皮书(2011)

Microsoft Word - ¸ê°T³q³ø273´Á.doc

Microsoft Word htm

untitled

User Group SMTP

RUN_PC連載_10_.doc

用友零售案例集V4

安裝與使用 SQL Server 2014

Microsoft Word - 小心翼翼的二十一點N.doc

yy.xls


穨finaldiss.doc

13. 下 列 植 物 的 向 性 或 運 動, 哪 些 是 受 到 生 長 素 作 用 的 影 響?(5-4) 甲. 睡 蓮 的 花 到 了 晚 上 會 合 起 來 ; 乙. 黃 瓜 的 捲 鬚 攀 附 竹 竿 向 上 生 長 ; 丙. 含 羞 草 的 葉 經 碰 觸 後 閉 合 ; 丁. 紅 豆


第十二章 角色转换 走向成功

16 标 本 缓 急 的 护 理 原 则 不 包 括 ( 扶 正 祛 邪 法 ) 17 顺 从 疾 病 假 象 而 进 行 护 理 的 方 法 为 ( 反 护 法 ) 18 下 列 属 于 正 护 法 的 是 ( 虚 则 补 之 ) 19 因 中 气 不 足 脾 阳 不 运 而 致 的 腹 胀 便

???p???????????i?h?h?D???N_?s_

國立和美實驗學校103學年度第1次教師甄選簡章

3. 透 過 團 體 小 組 分 別 設 計 出 一 套 自 行 車 伸 展 操 4. 教 師 介 紹 騎 乘 自 行 車 上 座 方 法 煞 車 及 踩 踏 等 要 領. 練 習 自 行 車 運 動 中 基 本 的 上 座 平 衡 直 行 轉 彎 煞 車 等 動 作 ( 二 ) 自 行 車 運 動

104 年 度 推 廣 校 園 正 確 用 藥 教 育 模 式 中 心 學 校 成 果 報 告 書 學 校 : 桃 園 市 中 心 學 校 田 心 國 民 小 學 壹 計 畫 目 的 一 凝 聚 本 市 中 心 學 校 與 重 點 種 子 學 校 正 確 用 藥 教 育 推 廣 共 識, 期 能 培

Transcription:

第十章預存程序 (Stored Procedure) 10-1 為何使用預存程序 10-1-1 使用預存程序的優點 10-1-2 預存程序的種類 10-1-3 建立預存程序 10-1-4 執行預存程序 10-1-5 修改預存程序 10-2 預存程序的相關設計 10-2-1 使用參數 10-2-2 取得傳回值 10-2-3 預存程序的編譯 10-2-4 在應用系統執行預存程序 1/24

10-1 為何使用預存程序 10-1-1 使用預存程序的優點 接受輸入參數 輸出參數 呼叫其他程序 將狀態值予以傳回 可進行模組化的程式撰寫 (sp 在資料庫上執行 ) 可加快執行速度 ( 重複執行時, 可不需要重新編譯 ) 可減少網路負荷 2/24

[ 補充 ] 預存程序限制 CREATE PROCEDURE 陳述式不能與其他 SQL 陳述式合併在單一批次 (GO) 處理中 若要建立程序, 您必須擁有資料庫的 CREATE PROCEDURE 權限以及建立程序之結構描述的 ALTER 權限 對於 CLR (Common Language Runtime) 預存程序, 您必須擁有在 <method_specifier> 中參考的組件, 或是擁有該組件的 REFERENCES 權限 預存程序是結構描述範圍的物件, 而且其名稱必須依照識別碼的規則 您只可以在目前資料庫中建立預存程序 3/24

10-1-2 預存程序的種類 可區分為三個類別 : 1. 系統預存程序 2. 觸發程序 3. 一般預存程序 4/24

一. [ 補充 ]: 預存程序 (1/3) 使用者自訂預存程序 : 預存程序是封裝程式碼以供重複使用的模組或常式 預存程序可以採用輸入參數 將表格式或純量結果和訊息傳回用戶端 採用資料定義語言 (DDL) 和資料操作語言 (DML) 陳述式, 以及傳回輸出參數 在 SQL Server 2005 中, 預存程序有兩種類型 :Transact-SQL 或 CLR Transact-SQL SQL: Transact-SQL 預存程序是儲存的 Transact-SQL 陳述式集合, 可以採用及傳回使用者提供的參數 例如, 根據用戶端應用程式提供的資訊, 預存程序可能包含將新資料列插入一或多個資料表所需的陳述式 預存程序可能從資料庫將資料傳回用戶端應用程式 例如, 電子商務 Web 應用程式可能根據線上使用者指定的搜尋條件, 使用預存程序傳回特定產品的資訊 CLR: CLR 預存程序是 Microsoft.NET Framework Common Language Runtime (CLR) 方法的參考, 可以採用並傳回使用者提供的參數 它們會在.NET Framework 組件中的類別上, 當作公開的靜態方法實作 5/24

[ 補充 ]: 預存程序 (2/3) 二. 擴充預存程序 : 擴充預存程序可讓您在程式設計語言中 ( 如 : C ), 建立自己的外部常式 擴充預存程序是 Microsoft SQL Server 執行個體可以動態載入和執行的 DLL 擴充預存程序會直接在 SQL Server 執行個體的位址空間中執行, 並且使用 SQL Server 擴充預存程序 API 進行程式設計 [ 注意 ]: 未來版本的 Microsoft SQL Server 將不再提供此功能 請避免在新的開發工作中使用此功能, 並計劃修改目前使用此功能的應用程式 使用 <CLR 整合 > 代替 6/24

[ 補充 ]: 預存程序 (3/3) 三. 系統預存程序 : SQL Server 2005 中的許多管理活動都可透過特殊種類的程序 ( 稱為系統預存程序 ) 來執行 例如,sys.sp_changedbowner 就是一種系統預存程序 系統預存程序實際上儲存在 Resource 資料庫中, 而且會有 sp_ 前置詞 系統預存程序邏輯上會出現在每個系統自訂和使用者自訂資料庫的 sys 結構描述中 SQL Server 2005 中,GRANT DENY 和 REVOKE 權限都可套用至系統預存程序 SQL Server 支援的系統預存程序, 可對各種維護活動提供 SQL Server 到外部程式的介面 這些擴充預存程序會使用 xp_ 前置詞 7/24

範例 : 擴充預存程序 8/24

10-1-3 建立預存程序 使用 CREATE PROCEDURE AS 陳述式 資料庫 \ 可程式性 \ 預存程序 \ 新增預存程序 9/24

圖 10-3 SET ANSI_NULLS 是 ON 時 : 等於 (=) 和不等於 (<>) 比較運算子採用遵照 SQL-92 標準, 即 SQL-92 標準要求對於 Null 值的等於 (=) 或不等於 (<>) 的比較得出 FALSE 當 SET QUOTED_IDENTIFIER 是 ON ( 預設值 ), 您可以用雙引號來分隔識別碼, 文字則必須用單引號來分隔 當 SET QUOTED_IDENTIFIER 是 OFF 時, 識別碼不能附加引號 10/24

撰寫程式的原則 以下的陳述式不得用於預存程序中的任何位置 : CREATE DEFAULT CREATE TRIGGER CREATE PROCEDURE CREATE VIEW CREATE RULE 預存程序內可以建立其他資料庫物件 預存程序中可以引用暫存資料表 ( 區域 #, 全域 ##),p.10-7 建立本機暫存資料表, 該暫存資料表將只為該預存程序而存在 11/24

撰寫程式的原則 被呼叫的預存程序可以存取第一個預存程序所建的所有物件, 包括暫存資料表 若執行了一個遠端預存程序而變更遠端的 SQL Server 執行個體, 則這些變更無法復原 參數數量上限是 2100 個 區域變數個數沒有限制 預存程序的大小上限是 128 MB 12/24

10-1-4 執行預存程序 EXEC PROCEDURE 輸入參數 13/24

10-1-5 修改預存程序 開啟 可程式性 預存程序 後, 選取欲更改的預存程序, 按下右鍵及選取 修改 語法是 ALTER PROCEDURE 14/24

10-2 預存程序的相關設計 10-2-1 使用參數 參數是預存程序非常重要的運用 參數共分三種, 包括輸入及輸出, 及一個傳回碼 定義參數時, 參數名稱之前須加上 @ 符號 15/24

Q: 左邊預存程序功能為何? 16/24

10-2-2 取得傳回值 17/24

取得傳回值 : 結果 18/24

[ 補充篇 ] 預存程序 - 範例 Q: 左邊預存程序功能為何? USE AdventureWorks; GO IF OBJECT_ID ( 'Production.usp_GetList', 'P' ) IS NOT NULL DROP PROCEDURE Production.usp_GetList; GO CREATE PROCEDURE Production.usp_GetList @product varchar(40), @maxprice money, @compareprice money OUTPUT, @listprice money OUT AS SELECT p.name AS Product, p.listprice AS 'List Price' FROM Production.Product p JOIN Production.ProductSubcategory s ON p.productsubcategoryid = s.productsubcategoryid WHERE s.name LIKE @product AND p.listprice < @maxprice; -- Populate the output variable @listprice. SET @listprice = (SELECT MAX(p.ListPrice) FROM Production.Product p JOIN Production.ProductSubcategory s ON p.productsubcategoryid = s.productsubcategoryid WHERE s.name LIKE @product AND p.listprice < @maxprice); -- Populate the output variable @compareprice. SET @compareprice = @maxprice; GO 19/24

[ 補充篇 ] 預存程序 - 執行 DECLARE @compareprice money, @cost money EXECUTE Production.usp_GetList '%Bikes%', 700, @compareprice OUT, @cost OUTPUT IF @cost <= @compareprice BEGIN PRINT 'These products can be purchased for less than $'+RTRIM(CAST(@compareprice AS varchar(20)))+'.' END ELSE PRINT 'The prices for all products in this category exceed $'+ RTRIM(CAST(@compareprice AS varchar(20)))+'.' GO 20/24

[ 補充篇 ] 預存程序 - 結果 21/24

10-2-3 預存程序的編譯 以 WITH 為首的兩個關鍵字 WITH RECOMPILE: 每次執行時均重新編譯 WITH ENCRYPTION: 為預存程序的內容予以加密 編譯目的是產生查詢計畫 查詢計畫會在執行後被保留在快取中, 故不一定每次都要編譯 22/24

10-2-4 在應用系統執行預存程序 在 ODBC 使用 ADO 物件 13 Dim cm As ADODB.Command 宣告及設定新變數 14 Set cm = New ADODB.Command 15 cm.activeconnection = Conn 設定資料連接 16 cm.commandtype = adcmdstoredproc 設定型態 17 cm.commandtext = "eb_sp_insertcategory" 設定預存程序名稱 18 cm.parameters(1) = Me![CateType] 分別輸入參數值 19 cm.parameters(2) = Me![CateName] 20 cm.execute 執行預存程序 23/24

在應用系統執行預存程序 在 Visual Basic.NET 使用 ADO.NET 01 Dim cm As SqlClient.SqlCommand = New SqlClient.SqlCommand 02 cm.connection = Conn 設定及建立新 Command 物件 03 cm.commandtype = CommandType.StoredProcedure 設定型態 04 cm.commandtext = "eb_sp_gettype" 設定預存程序名稱 05 Dim cp1 As SqlClient.SqlParameter = cm.parameters.add("@inputtypeid", SqlDbType.NVarChar, 50) 06 cp1.direction = ParameterDirection.Input 輸入型態 07 cp1.value = e.node.tag 建立第一個參數 08 Dim cp2 As SqlClient.SqlParameter = cm.parameters.add("@outtype", SqlDbType.NVarChar, 50) 09 cp2.direction = ParameterDirection.Output 建立第二個輸出參數 10 Dim dr As SqlClient.SqlDataReader = cm.executereader() 執行 11 labselectcategory.text = cp2.value 取得傳回值 24/24