自定義函數和存儲過程
--(1):輸入一個數,返回結果為這個數加1
--存儲過程:
create procere pro_test
@input int,
@output int output
as
set @output = @input+1
go
--函數:
create function f_test(@input int)
returns int
as
begin
declare @output int
set @output = @input+1
return @output
end
--(2)輸入一個數,返回一個結果集
--存儲過程:
create procere pro_test2
@input int
as
select * from sysobjects where id = @input
go
--函數:
create function f_test2(@input int)
returns table
as
return (select * from sysobjects where id = @input)
㈡ sql資料庫中的自定義函數可以調用存儲過程
1)自定義函數中不能調用存儲過程,如果調用了,函數可以順利創建,但是調用函數會出錯
2)自定義函數中不能創建表,刪除表,插入表數據
解決辦法:
可以先把存儲過程返回的結果插入到臨時表,然後在函數里調用臨時表,或者運用內置函數,或者使用復雜的聯合查詢實現想要的結果
㈢ sql用戶自定義函數和存儲過程有什麼區別
本質上沒區別。只是函數有如:只能返回一個變數的限制。而存儲過程可以返回多個。而函數是可以嵌入在sql中使用的,可以在select中調用,而存儲過程不行。執行的本質都一樣。
㈣ 存儲過程和函數的區別
一、含義不同
1、存儲過程:存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並作為一個單元處理。
2、函數:是由一個或多個 SQL 語句組成的子程序,可用於封裝代碼以便重新使用。函數限制比較多,如不能用臨時表,只能用表變數等
二、使用條件不同
1、存儲過程:可以在單個存儲過程中執行一系列 SQL 語句。而且可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。
2、函數:自定義函數諸多限制,有許多語句不能使用,許多功能不能實現。函數可以直接引用返回值,用表變數返回記錄集。但是,用戶定義函數不能用於執行一組修改全局資料庫狀態的操作。
三、執行方式不同
1、存儲過程:存儲過程可以返回參數,如記錄集,函數只能返回值或者表對象。存儲過程的參數有in,out,inout三種,存儲過程聲明時不需要返回類型。
2、函數:函數參數只有in,而函數需要描述返回類型,且函數中必須包含一個有效的return語句。
㈤ 關於SQL的臨時表、自定義函數、儲存過程的問題
如果你有編程基礎的話
那麼自定義函數和存儲過程的區別,就是程序裡面函數與過程的區別,函數只是為了實現某個功能,而過程是為了實現某個流程。
至於使用的時間
這個跟你的實際需求有關系的,一般系統帶的函數就能滿足需求。
存儲過程這個看你項目的訪問量,訪問量小的話
如果是快速開發不會用到存儲過程
直接在程序裡面寫SQL語句就OK。如果訪問量大,那麼必須使用存儲過程。
臨時表的好處是它可以是只對某個用戶的表,而且不具有實際意義,並且可以定義自動銷毀的臨時表。跟視圖在某種情況下有相同之處。
臨時表的試用時間也是跟你的需求有關系的。
創建語句差不多
都是T-SQL語句。
最後一個問題你得搜索一下才知道,一般情況下定義的臨時表都是自動銷毀的,使用完畢會drop掉(節省資源,如果是#開頭的臨時表
系統會自動在使用完畢後銷毀掉。)