搜尋
首頁資料庫mysql教程在 SQL Server 中編寫函數和預存程序

在 SQL Server 中编写函数和存储过程

SQL 語句的集合包含在預存程序和函數、用於執行某些任務的資料庫物件中(或也可以在資料科學中使用)。兩者在許多方面都有所不同。

在本文中,我們將詳細討論函數和過程以及它們的差異。

讓我們從預存程序開始 -

SQL 中的預存程序

簡單編寫的 SQL 程式碼保存起來以供多次重複使用,從而構成了一個預存程序。如果您能想到經常編寫的查詢,則可以將其儲存為預存程序,然後呼叫該預存程序來執行作為預存程序的一部分儲存的 SQL 程式碼。這將使您不必重複編寫相同的問題。

您可以重複執行相同的 SQL 程式碼並向預存程序提供參數。根據需要,預存程序將根據提供的參數值做出適當的回應。

也可以透過預存程序來增強效能。一組 SQL 語句用來執行多項任務。接下來執行哪些 SQL 語句取決於初始 SQL 語句和條件邏輯的結果。這些 SQL 語句及其包含的條件邏輯可以透過將它們寫入預存程序來組合成伺服器上的單一執行計劃。由於所有工作都在伺服器上執行,因此可以執行條件邏輯,而無需將結果傳遞給客戶端。

預存程序的優點

編譯執行

每個預存程序都由 SQL Server 編譯一次,然後重複使用執行計劃。當經常調用預存程序時,效能提升是巨大的。

客戶端/伺服器流量減少

如果您的環境中存在網路頻寬問題,預存程序可以將冗長的 SQL 搜尋壓縮為可以透過線路傳輸的單行,您將會感到欣慰。

有效的程式碼重複使用與程式設計抽象

許多使用者和客戶端應用程式都可以使用預存程序。如果您按照規劃的方法使用它們,則完成開發週期所需的時間會更少。

加強安全措施

獨立於基礎表的權限,您可以為使用者提供執行預存程序的存取權限。

SQL 中的函數

SQL Server 支援兩種類型的函數

內建函數

內建函數依照 Transact-SQL 參考定義進行操作,且不可變更。只有遵循 Transact-SQL 參考既定語法的 Transact-SQL 語句才可以使用這些函式作為參考。

系統已經定義了這些函數。它分為兩類 -

在本教學中,我們將參考下表 -

ID

姓名

標記

年齡

1

嚴厲

90

19

#2

蘇雷什

#50

#20

#3

普拉蒂克

#80

#21

#4

丹拉吉

#95

#19

#5

拉姆

85

#18

#

標量函數

這些運算將一個值作為輸入並輸出它。一些系統標量操作包括 -

  • round() - 將數字四捨五入到最接近的三位。例如,round(28.64851) 將產生 28.649

SELECT ROUND(MARKS,0) FROM students;
  • upper() - upper("english") 傳回英語,lower("ENGLISH") 回傳英語。

SELECT upper(NAME) FROM Students;

輸出

HARSH
SURESH
PRATIK
DHANRAJ
RAM
  • rand() - 使用函數 rand(),將會傳回一個範圍內的隨機數。例如,Rand(8),傳回 0.71372242401 或任何其他隨機產生的數字。

系統聚合函數

這些函數傳回單一值,這些函數使用輸入參數的集合。例子包括 -

Avg() 將為所有提供的輸入提供平均值。

範例

SELECT AVG(MARKS) FROM Students;

輸出

80

Count() 此函數將傳回滿足給定條件的行數。

範例

SELECT COUNT(*) FROM Students;

輸出

5

Max() 和 min() 函數 max() 和 min() 將傳回所提供參數中的最高值和最低值。

範例

#
SELECT MAX(AGE) FROM Students

輸出

21

範例

SELECT MIN(AGE) FROM Students;

輸出

18

使用者定義函數

使用 CREATE FUNCTION 指令建立自訂 Transact-SQL 函數。使用者定義函數提供單一值,並且需要零到多個輸入參數。某些使用者定義函數 (UDF) 傳回的是單一資料值,例如十進位數、字元或 int。

標量運算

使用者定義的標量函數為函數操作的每一步輸出一個值。傳回函數中的任何資料類型值。

表值函數

內聯函數

具有使用者定義值的內聯表函數進行運算並將結果作為表傳回。沒有 BEGIN/END 主體。只需使用一個 SELECT 語句即可獲得結果。

多語句函數

如果使用者定義函數包含不可修改的 SELECT 語句或包含多個 SELECT 語句,則其給予的結果不會變更。我們必須明確指定表變數並描述可以從各種 SQL 查詢中檢索到的值。

使用者定義函數的優點

  • 支援模組化程式設計

  • #該函數可以建立一次,保存在資料庫中,然後根據您的需求在軟體中多次使用。無需更改應用程式的原始程式碼即可更改使用者定義的函數。

  • 它們可以加快執行速度

  • Transact-SQL 使用者定義函數(如預存程序)透過快取計劃並在多次執行中重複使用它們來降低編譯成本。由於使用者定義的函數不需要在每次使用時重新解析和最佳化,因此執行時間明顯縮短。

  • 對於計算工作負載、業務邏輯和字串操作,CLR 函數的效能顯著優於 Transact-SQL 函數。資料存取密集型邏輯更適合 Transact-SQL 操作。

  • 它們可能會減少網路活動。

  • 函數可用來表示基於無法以單一數字表達式表示的複雜限制來過濾資訊的操作。為了減少提供給客戶端的行數,可以在 WHERE 子句中使用該函數。

使用者定義函數和預存程序的差異

下表突顯了 SQL 中使用者定義函數和預存程序之間的主要差異 -

標準

使用者定義函數

#預存程序

傳回值

單一值

單一、多個甚至零個

參數

輸入值

輸入與輸出值

#資料庫

無法修改

可以修改

宣告

僅 SELECT 語句

SELECT 與 DML 語句

呼叫

從過程中呼叫

#無法從函數呼叫

#編譯執行

每次都需要編譯

#只需編譯一次

#交易管理

不可能

不可能

結論

在這篇文章中,我們深入討論了預存程序及其優點、函數、函數的類型以及函數的優點,最後得出函數和預存程序之間的差異。

以上是在 SQL Server 中編寫函數和預存程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:tutorialspoint。如有侵權,請聯絡admin@php.cn刪除
減少在Docker中使用MySQL內存的使用減少在Docker中使用MySQL內存的使用Mar 04, 2025 pm 03:52 PM

本文探討了Docker中的優化MySQL內存使用量。 它討論了監視技術(Docker統計,性能架構,外部工具)和配置策略。 其中包括Docker內存限制,交換和cgroups

mysql無法打開共享庫怎麼解決mysql無法打開共享庫怎麼解決Mar 04, 2025 pm 04:01 PM

本文介紹了MySQL的“無法打開共享庫”錯誤。 該問題源於MySQL無法找到必要的共享庫(.SO/.DLL文件)。解決方案涉及通過系統軟件包M驗證庫安裝

如何使用Alter Table語句在MySQL中更改表?如何使用Alter Table語句在MySQL中更改表?Mar 19, 2025 pm 03:51 PM

本文討論了使用MySQL的Alter Table語句修改表,包括添加/刪除列,重命名表/列以及更改列數據類型。

在 Linux 中運行 MySQl(有/沒有帶有 phpmyadmin 的 podman 容器)在 Linux 中運行 MySQl(有/沒有帶有 phpmyadmin 的 podman 容器)Mar 04, 2025 pm 03:54 PM

本文比較使用/不使用PhpMyAdmin的Podman容器直接在Linux上安裝MySQL。 它詳細介紹了每種方法的安裝步驟,強調了Podman在孤立,可移植性和可重複性方面的優勢,還

什麼是 SQLite?全面概述什麼是 SQLite?全面概述Mar 04, 2025 pm 03:55 PM

本文提供了SQLite的全面概述,SQLite是一個獨立的,無服務器的關係數據庫。 它詳細介紹了SQLite的優勢(簡單,可移植性,易用性)和缺點(並發限制,可伸縮性挑戰)。 c

在MacOS上運行多個MySQL版本:逐步指南在MacOS上運行多個MySQL版本:逐步指南Mar 04, 2025 pm 03:49 PM

本指南展示了使用自製在MacOS上安裝和管理多個MySQL版本。 它強調使用自製裝置隔離安裝,以防止衝突。 本文詳細詳細介紹了安裝,起始/停止服務和最佳PRA

如何為MySQL連接配置SSL/TLS加密?如何為MySQL連接配置SSL/TLS加密?Mar 18, 2025 pm 12:01 PM

文章討論了為MySQL配置SSL/TLS加密,包括證書生成和驗證。主要問題是使用自簽名證書的安全含義。[角色計數:159]

哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什麼?哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什麼?Mar 21, 2025 pm 06:28 PM

文章討論了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比較了它們對初學者和高級用戶的功能和適合性。[159個字符]

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境