學習筆記7(SQL Server儲存過程詳解)

2021-08-26 03:27:16 字數 2259 閱讀 4027

什麼是儲存過程:

儲存過程(procedure)類似於c#語言中的方法,它是sql語句和控制流語句的預編譯集合。儲存過程儲存在資料庫內,可由應用程式通過乙個呼叫執行,而且允許使用者宣告變數、邏輯控制語句以及其他強大的程式設計功能。

儲存過程可包含邏輯控制語句和資料操作語句,它可以接收引數、輸出引數、返回單個或多個結果集以及返回值。

儲存過程在建立時即在伺服器上進行編譯,所以執行起來比單個sql語句快。

類似於c#中的類庫,sql server 提供了一些預編譯的儲存過程,這些儲存過程稱為「系統儲存過程」。

sql server中的儲存過程的特徵如下:

1>接收輸入引數,並向呼叫過程或語句返回值。

2>包含在資料庫中執行操作或呼叫其他儲存過程的程式設計語句。

3>向呼叫過程返回狀態值,指示執行過程是否成功(如果失敗,還返回失敗原因)

使用儲存過程有下列優點:

1>允許模組化程式設計

只需建立一次儲存過程並將其儲存在資料庫中,所以即可在程式中呼叫該過程任意次。

2>允許更快地執行

如果某操作需要大量的t-sql**或需要重複執行,儲存過程將比t-sql批處理**的執行要快。將在建立儲存過程時對其進行分析和優化,並可在首次執行該過程後使用該過程記憶體中的版本。但如果使用t-sql批處理**,每次執行t-sql語句時,都要從客戶端重**送,並且在sql-server每次執行這些語句時,都要對其進行編譯和優化。

3>減少網路流量

建立使用儲存過程後,乙個需要數百行t-sql**的操作,由一條執行該過程**的單獨語句就可實現,而不需要在網路中傳送數百行**

4>可作為安全機制使用

即使對於沒有直接執行儲存過程中語句的許可權的使用者,也可授予他們執行該儲存過程的許可權

儲存過程分為以下兩類:

1>系統儲存過程

2>使用者自定義儲存過程

常用的系統儲存過程:

sp_databases:列出伺服器上的所有資料庫

sp_helpdb:報告有關指定資料庫或所有資料庫的資訊

sp_renamedb:更改資料庫的名稱

sp_tables:返回當前環境下可查詢的物件的列表

sp_columns:返回某個表列的資訊

sp_help:檢視某個表的所有資訊

sp_helpconstraint:檢視某個表的約束

sp_helpindex:檢視某個表的索引

sp_stored_procedures:列出當前環境中的所有儲存過程

sp_password:新增或修改登入賬戶的密碼

sp_helptext:顯示預設值、未加密的儲存過程、使用者定義的儲存過程、觸發器或檢視的實際文字

另外,還有乙個常用的擴充套件儲存過程:xp_cmdshell,它可以完成dos命令下的一些操作,諸如建立資料夾、列出檔案列表等。

使用者定義的儲存過程:

除了系統儲存過程,使用者還可以建立自己的儲存過程,可使用microsoft sql management studio或使用t-sql語句,使用microsoft sql management studio建立儲存過程的步驟類似於檢視,用於建立儲存過程的t-sql語句為create procedure。所有的儲存過程都建立在當前資料庫中。

建立不帶引數的儲存過程:

使用t-sql語句建立儲存過程的語法如下:

create proc[edure] 儲存過程名

assql語句

呼叫儲存過程:

exec 儲存過程名

建立帶輸入引數的的儲存過程:

輸入引數:可以在呼叫時向儲存過程傳遞引數,此類引數可用來在儲存過程中傳入值。

帶輸入引數的儲存過程t-sql語句如下:

create proc[edure] 儲存過程名

@引數1 資料型別 [= 預設值],

@引數n 資料型別 [= 預設值]

assql語句

呼叫儲存過程:

exec 儲存過程名 引數1的值,……,引數n的值

或exec 儲存過程名 @引數1=值,……,@引數n=值

建立帶輸出引數的儲存過程:

輸出引數:如果希望返回值,則可以使用輸出引數,輸出引數後有「output」標記,執行儲存過程後,將把返回值存放在輸出引數中,可供其他t-sql語句讀取訪問。

帶輸出引數的儲存過程t-sql語法如下:

create proc[edure] 儲存過程名

@引數1 資料型別 [output ],

@引數n 資料型別 [output]

assql語句

呼叫儲存過程:

exec 儲存過程名 變數名 output

商業保理學習筆記

一 定義 商業保理是債權人將應收賬款轉讓給保理機構或銀行等金融機構的一種融資方式,是一種債權的轉讓行為,是債權的買斷。二 1 與質押的區別 質押的債權債務關係未發生改變,債權仍歸屬於出質人所有。保理的債權債務關係發生了變化,債權歸屬於保理公司或金融機構 2 與 鏈金融的關係 鏈金融是商業保理的延伸,...

sqlserver學習筆記

1.從乙個已經存在的表複製出乙個新錶 要求該錶不存在 select into time pense from time pensetemp 從time pensetemp表中複製time pense表 2.sql查詢表中的所有約束 exec sp helpconstraint objname 表名 ...

sqlserver學習筆記

排序函式 產生乙個新的列,一般作為乙個流水號 排序函式 over 分組子句 排序子句 desc asc 1 row number 產生乙個新的列流水號列,所有的流水號從1開始,然後累加 2 rank 產生乙個新的列流水號列,所有的流水號從1開始,然後累加,如果排序子句內容重複,流水號也跟著重複.而後...