SQL中自定義函數(shù)的存儲(chǔ)過程的區(qū)別
SQL中的存儲(chǔ)過程和自定義函數(shù)都是經(jīng)常用到的,那么,它們之間究竟有何區(qū)別呢?下文將為您分別分析二者的異同點(diǎn),供您參考,希望對(duì)您有所啟迪。
存儲(chǔ)過程:
存儲(chǔ)過程可以使得對(duì)數(shù)據(jù)庫的管理、以及顯示關(guān)于數(shù)據(jù)庫及其用戶信息的工作容易得多。存儲(chǔ)過程是 SQL 語句和可選控制流語句的預(yù)編譯集合,以一個(gè)名稱存儲(chǔ)并作為一個(gè)單元處理。存儲(chǔ)過程存儲(chǔ)在數(shù)據(jù)庫內(nèi),可由應(yīng)用程序通過一個(gè)調(diào)用執(zhí)行,而且允許用戶聲明變量、有條件執(zhí)行以及其它強(qiáng)大的編程功能。
存儲(chǔ)過程可包含程序流、邏輯以及對(duì)數(shù)據(jù)庫的查詢。它們可以接受參數(shù)、輸出參數(shù)、返回單個(gè)或多個(gè)結(jié)果集以及返回值。
可以出于任何使用 SQL 語句的目的來使用存儲(chǔ)過程,它具有以下優(yōu)點(diǎn):
1、可以在單個(gè)存儲(chǔ)過程中執(zhí)行一系列 SQL 語句。
2、可以從自己的存儲(chǔ)過程內(nèi)引用其它存儲(chǔ)過程,這可以簡化一系列復(fù)雜語句。
3、存儲(chǔ)過程在創(chuàng)建時(shí)即在服務(wù)器上進(jìn)行編譯,所以執(zhí)行起來比單個(gè) SQL 語句快。
用戶定義函數(shù):
Microsoft SQL Server 2000 允許創(chuàng)建用戶定義函數(shù)。與任何函數(shù)一樣,用戶定義函數(shù)是可返回值的例程。根據(jù)所返回值的類型,每個(gè)用戶定義函數(shù)可分成以下三個(gè)類別:
1、返回可更新數(shù)據(jù)表的函數(shù):如果用戶定義函數(shù)包含單個(gè) Select 語句且該語句可更新,則該函數(shù)返回的表格格式結(jié)果也可以更新。
2、返回不可更新數(shù)據(jù)表的函數(shù):如果用戶定義函數(shù)包含不止一個(gè) Select 語句,或包含一個(gè)不可更新的 Select 語句,則該函數(shù)返回的表格格式結(jié)果也不可更新。
3、返回標(biāo)量值的函數(shù):用戶定義函數(shù)可以返回標(biāo)量值。
存儲(chǔ)過程
1. 功能強(qiáng)大,限制少
2. 不能直接引用返回值
3. 用select語句返回記錄集
自定義函數(shù)
1. 諸多限制,有許多語句不能使用,許多功能不能實(shí)現(xiàn)
2. 可以直接引用返回值
3. 用表變量返回記錄集
【編輯推薦】