目錄
SQL 中的預存程序
預存程序的優點
編譯執行
客戶端/伺服器流量減少
有效的程式碼重複使用與程式設計抽象
加強安全措施
SQL 中的函數
內建函數
標量函數
輸出
系統聚合函數
範例
使用者定義函數
標量運算
表值函數
內聯函數
多語句函數
使用者定義函數的優點
使用者定義函數和預存程序的差異
結論
首頁 資料庫 mysql教程 在 SQL Server 中編寫函數和預存程序

在 SQL Server 中編寫函數和預存程序

Sep 16, 2023 pm 03:13 PM

在 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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱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.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

說明InnoDB全文搜索功能。 說明InnoDB全文搜索功能。 Apr 02, 2025 pm 06:09 PM

InnoDB的全文搜索功能非常强大,能够显著提高数据库查询效率和处理大量文本数据的能力。1)InnoDB通过倒排索引实现全文搜索,支持基本和高级搜索查询。2)使用MATCH和AGAINST关键字进行搜索,支持布尔模式和短语搜索。3)优化方法包括使用分词技术、定期重建索引和调整缓存大小,以提升性能和准确性。

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

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

與MySQL中使用索引相比,全表掃描何時可以更快? 與MySQL中使用索引相比,全表掃描何時可以更快? Apr 09, 2025 am 12:05 AM

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

可以在 Windows 7 上安裝 mysql 嗎 可以在 Windows 7 上安裝 mysql 嗎 Apr 08, 2025 pm 03:21 PM

是的,可以在 Windows 7 上安裝 MySQL,雖然微軟已停止支持 Windows 7,但 MySQL 仍兼容它。不過,安裝過程中需要注意以下幾點:下載適用於 Windows 的 MySQL 安裝程序。選擇合適的 MySQL 版本(社區版或企業版)。安裝過程中選擇適當的安裝目錄和字符集。設置 root 用戶密碼,並妥善保管。連接數據庫進行測試。注意 Windows 7 上的兼容性問題和安全性問題,建議升級到受支持的操作系統。

如何為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個字符]

InnoDB中的聚類索引和非簇索引(次級索引)之間的差異。 InnoDB中的聚類索引和非簇索引(次級索引)之間的差異。 Apr 02, 2025 pm 06:25 PM

聚集索引和非聚集索引的區別在於:1.聚集索引將數據行存儲在索引結構中,適合按主鍵查詢和範圍查詢。 2.非聚集索引存儲索引鍵值和數據行的指針,適用於非主鍵列查詢。

您如何處理MySQL中的大型數據集? 您如何處理MySQL中的大型數據集? Mar 21, 2025 pm 12:15 PM

文章討論了處理MySQL中大型數據集的策略,包括分區,碎片,索引和查詢優化。

See all articles