SQL?server創(chuàng)建存儲過程詳細(xì)圖文教程
前言
存儲過程: 可以理解為完成特定功能的一組 SQL
語句集,存儲在數(shù)據(jù)庫中,經(jīng)過第一次編譯,之后的運行不需要再次編譯,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來調(diào)用存儲過程。
如何創(chuàng)建存儲過程
創(chuàng)建存儲過程可以有兩種方式:一是在 SSMS
中界面操作創(chuàng)建存儲過程,而后修改其中的 SQL
語句及存儲過程名稱;二是通過命令行直接編寫創(chuàng)建存儲過程。
在操作之前,得要有一個數(shù)據(jù)庫和數(shù)據(jù)庫中將要使用存儲過程查詢或操作的數(shù)據(jù)表,這里以 MyDBDemo
數(shù)據(jù)庫為例,其中有一個 sys_user
的用戶數(shù)據(jù)表。
1、SSMS 界面創(chuàng)建存儲過程:
界面鼠標(biāo)操作創(chuàng)建存儲過程方便快捷,一些基礎(chǔ)的腳本不需要手動編寫,由 SSMS
自動生成。
步驟: 展開數(shù)據(jù)庫中的【可編程性】,在【存儲過程】上鼠標(biāo)單擊右鍵出現(xiàn)彈出菜單,點擊【存儲過程】即可彈出新的查詢窗口,里面有一些默認(rèn)的 SQL
腳本。
軟件自動生成的存儲過程創(chuàng)建腳本,現(xiàn)在可以基于此修改存儲過程中的內(nèi)容了。
說明: 從 第 1 行到 20 行不需要關(guān)注,這些都是一些設(shè)置和注釋說明,第 21 行到 33 行才是存儲過程的主要內(nèi)容。下面將通過代碼逐行介紹這些命令。
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> -- 這一行表示存儲過程的名稱, '<>' 是占位符,將其替換為存儲過程的名稱 -- 以下列出存儲過程的參數(shù)以及返回參數(shù),這是設(shè)置存儲過程有哪些參數(shù)和返回什么數(shù)據(jù) <@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, <@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0> AS BEGIN -- 從這里開始就是存儲過程的主體部分 -- 這里面的內(nèi)容就是 SQL 語句集,可以放置許多的 SQL 增刪查改等操作腳本 END -- 這里結(jié)束存儲過程,表示存儲過程的 SQL 集在這里結(jié)束
2、SQL 腳本創(chuàng)建存儲過程:
腳本創(chuàng)建存儲過程就是自行編寫基礎(chǔ)的創(chuàng)建存儲過程的語句,如上所示代碼中的內(nèi)容都是自行手動編寫,然后執(zhí)行腳本即可創(chuàng)建好這個存儲過程。
如下創(chuàng)建存儲過程的腳本,是傳入用戶的數(shù)據(jù)參數(shù),插入到數(shù)據(jù)庫中,而后再查詢出來展示,詳細(xì)講解請看注釋,SQL
腳本如下所示:
CREATE PROCEDURE InsertUser -- 這里存儲過程的名稱為‘InsertUser' -- 輸入?yún)?shù)有userno、pwd、username、role、email,輸出參數(shù)有 count -- 輸入輸出參數(shù)的名稱前面必須加上 ‘@' ,表示其是一個變量。 @userno nvarchar(50), --輸入?yún)?shù),用戶編碼 @pwd nvarchar(50), -- 輸入?yún)?shù),登錄密碼 @username nvarchar(50), -- 輸入?yún)?shù),用戶姓名 @email nvarchar(50), -- 輸入?yún)?shù),用戶郵箱 @count int output-- 輸出參數(shù),當(dāng)前數(shù)據(jù)表中的總數(shù)據(jù)條數(shù),這里輸出參數(shù)采用 ‘output' 標(biāo)識 AS BEGIN -- 從這里開始就是存儲過程的主體部分 -- 這里插入一條數(shù)據(jù)到數(shù)據(jù)表中,數(shù)據(jù)內(nèi)容來源于存儲過程中傳入的內(nèi)容,其中用戶角色字段 ‘[role]' 設(shè)置默認(rèn)值為 ‘a(chǎn)dmin' INSERT INTO [dbo].[sys_user] ([userno],[pwd],[username],[role],[email]) VALUES (@userno,@pwd,@username,'admin',@email); -- 查詢出數(shù)據(jù)表 select * from [dbo].[sys_user]; -- 返回值總條數(shù)查詢 select @count = @@ROWCOUNT; END -- 這里結(jié)束存儲過程,表示存儲過程的 SQL 集在這里結(jié)束
存儲過程的使用或調(diào)用
存儲過程的使用需要采用關(guān)鍵字 EXEC
加上存儲過程名稱,而后跟隨參數(shù)的方式。
DECLARE @pdCount INT; -- 定義返回值參數(shù) -- 通過 exec <存儲過程名稱> <參數(shù)列表> 調(diào)用存儲過程 exec [dbo].[InsertUser] @userno='user-1',@pwd='123',@username='wanger',@email='123@abccom',@count=@pdCount output select @pdCount as '數(shù)據(jù)表總數(shù)' -- 查詢出返回值中的內(nèi)容
執(zhí)行結(jié)果如下所示:
存儲過程的意義
優(yōu)點:
1、存儲過程加快系統(tǒng)運行速度,存儲過程只在創(chuàng)建時編譯,以后每次執(zhí)行時不需要重新編譯。
2、存儲過程可以封裝復(fù)雜的數(shù)據(jù)庫操作,簡化操作流程,例如對多個表的更新,刪除等。
3、可實現(xiàn)模塊化的程序設(shè)計,存儲過程可以多次調(diào)用,提供統(tǒng)一的數(shù)據(jù)庫訪問接口,改進應(yīng)用程序的可維護性。
4、存儲過程可以增加代碼的安全性,對于用戶不能直接操作存儲過程中引用的對象,SQL Server可以設(shè)定用戶對指定存儲過程的執(zhí)行權(quán)限。
5、存儲過程可以降低網(wǎng)絡(luò)流量,存儲過程代碼直接存儲于數(shù)據(jù)庫中,在客戶端與服務(wù)器的通信過程中,不會產(chǎn)生大量的T_SQL代碼流量。
缺點:
1、數(shù)據(jù)庫移植不方便,存儲過程依賴與數(shù)據(jù)庫管理系統(tǒng), SQL Server 存儲過程中封裝的操作代碼不能直接移植到其他的數(shù)據(jù)庫管理系統(tǒng)中。
2、不支持面向?qū)ο蟮脑O(shè)計,無法采用面向?qū)ο蟮姆绞綄⑦壿嫎I(yè)務(wù)進行封裝,甚至形成通用的可支持服務(wù)的業(yè)務(wù)邏輯框架。
3、代碼可讀性差,不易維護。不支持集群。
結(jié)語
為什么需要存儲過程:效率高、降低網(wǎng)絡(luò)流量、復(fù)用性高、可維護性高、安全性高。
到此這篇關(guān)于SQL server創(chuàng)建存儲過程的文章就介紹到這了,更多相關(guān)SQL server創(chuàng)建存儲過程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sqlserver合并DataTable并排除重復(fù)數(shù)據(jù)的通用方法分享
網(wǎng)上合并DataTable通用方法的文章很多,結(jié)合項目開發(fā)中的常用需求,并借鑒網(wǎng)上的做法,寫了一個合并DataTable的通用方法,主要功能是合并兩個DataTable(結(jié)構(gòu)可以不同,如字段不完全一致),并可以根據(jù)某一列值進行排重處理2011-12-12SQLServer獲取臨時表所有列名或是否存在指定列名的方法
本文介紹了SQLServer獲取臨時表所有列名或是否存在指定列名的方法,需要的朋友一起來看下吧2016-12-12SQL Server數(shù)據(jù)庫重命名、數(shù)據(jù)導(dǎo)出的方法說明
這篇文章主要介紹了SQL Server數(shù)據(jù)庫重命名、數(shù)據(jù)導(dǎo)出、更改數(shù)據(jù)庫所有者的方法說明,大家參考使用吧2013-11-11