php server自定义函数,php:SQL Server用户自定义的函数种类详解
關于SQL Server用戶自定義的函數,有標量函數、表值函數(內聯表值函數、多語句表值函數)兩種。
題外話,可能有部分朋友不知道SQL Serve用戶自定義的函數應該是寫在哪里,這里簡單提示一下,在Microsoft SQL Server Managerment Studio里面,展開具體需要創建SQL Server用戶自定義函數的數據庫(即每個用戶自定義函數只針對具體的一個數據庫有用),然后找到可編程性選項,再展開找到函數選項,在具體的函數選項里面可參照下圖的方式鼠標右鍵選擇來添加。
所謂標量函數簡單點來講就是返回的結果只是一個標量,對于我來講,返回的結果就是一種類型的一個值。
寫法如下:CREATE FUNCTION
(
-- Add the parameters for the function here
)
RETURNS
AS
BEGIN
-- Declare the return variable here
DECLARE
-- Add the T-SQL statements to compute the return value here
SELECT =
-- Return the result of the function
RETURN CREATE FUNCTION GetSum
(
@firstNum int,
@secondNum int
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @result int
-- Add the T-SQL statements to compute the return value here
SELECT @result=@firstNum+@secondNum
-- Return the result of the function
RETURN @result
題外話:我們來看看上面的寫法,對于SQL Server來講,我們聲明一個變量的方式是用CREATE FUNCTION GetSum
(
@firstNum int,
@secondNum int
)
如果沒有參數,則只要保留括號即可。跟我們理解的函數寫法一致。CREATE FUNCTION GetSum
(
)
對于返回方式,這跟我們編程的方式又不大一樣。SQL Server函數的返回類型并不放在函數名前面,而是函數名括號的后面。而且函數的返回類型需要用到返回關鍵字RETURNS,而不是RETURN。
對于函數來講,當然也會有所謂的函數體。標量函數也一樣。它的函數體是包含在:AS
BEGIN
-- 函數體
END
對于需要在函數體里面聲明變量的話,則需要使用到DECLARE關鍵字進行聲明。函數體內的返回才是關鍵字RETURN。
好了,標量函數的例子也舉完了,要存到數據庫里面,還需要點擊Microsoft SQL Server Management Studio工具里的執行操作。這樣之后,就可以在查詢窗口里面跟查詢表數據一樣來查詢結果了。
使用方式好懂吧,但是需要注意的是[dbo]這個對象名在不能省,[GetSum]函數后面可也別少了()。說來也奇怪,對于表值函數來說,對象名[dbo]倒是不寫也可以正確執行。select [dbo].[GetSum]()
相對于標量函數只返回一個標量值,內聯表值函數返回的是表數據。當然羅,表數據就是Table類型。
寫法如下:CREATE FUNCTION
(
-- Add the parameters for the function here
,
)
RETURNS TABLE
AS
RETURN
(
-- Add the SELECT statement with parameter references here
SELECT 0
)
GOCREATE FUNCTION [GetMoreThanSalary]
(
@salary int
)
RETURNS TABLE
AS
RETURN
(
SELECT [FName],[FCity],[FAge],[FSalary] FROM [Demo].[dbo].[T_Person] Where [FSalary] > @salary
)
題外話:標量函數上面提過的內容,這里就不重復了。內聯表函數返回的表結構由函數體內的SELECT語句來決定。
對于標量函數來講,函數體是包含在如下結構中。AS
BEGIN
-- 函數體
END
但是對于內聯表值函數來講,函數體的結構則是如下的方式。內聯表值函數只執行一條SQL語句后返回Table結果。AS
RETURN
-- 函數體
END
執行表值函數的方式如下:select [FName],[FCity],[FAge],[FSalary] from [dbo].[GetMoreThanSalary](8000)
可以看得出,這種執行方式就跟普通表的執行方式一樣了。表值函數其實相當于存儲在內存空間里面的一張虛擬表。
多語句表值函數跟內聯表值函數都是表值函數,它們返回的結果都是Table類型。多語句表值函數顧名思義,就是可以通過多條語句來創建Table類型的數據。這里不同于內聯表值函數,內聯表值函數的返回結果是由函數體內的SELECT語句來決定。而多語句表值函數,則是需要指定具體的Table類型的結構。也就是說返回的Table,已經定義好要哪些字段返回。所以它能夠支持多條語句的執行來創建Table數據。CREATE FUNCTION
(
-- Add the parameters for the function here
,
)
RETURNS
TABLE
(
-- Add the column definitions for the TABLE variable here
,
)
AS
BEGIN
-- Fill the table variable with the rows for your result set
RETURN
END
GOALTER FUNCTION DemoFun
(
)
RETURNS
@result TABLE
(
name nvarchar(20),
city nvarchar(20),
age int,
salary int
)
AS
BEGIN
-- Fill the table variable with the rows for your result set
insert into @result(name, city, age, salary)
select FName,FCity,FAge,FSalary from dbo.T_Person where FSalary>8000
insert into @result(name, city, age, salary) values
('測試','China', 1, 0)
RETURN
END
GO
題外話:可以看得出,多語句表值函數的返回結果是定義好表結構的虛擬表。這又跟標量函數一樣了吧,只不過標量函數是返回一種類型的標量值而已。而且在多語句表值函數里面,你也會發現最后一句是RETURN。告訴執行程序,多語句表值函數已經執行完成。函數體結構跟標量函數的結構一樣。對于類型放在變量后面這種方式確實需要好好轉換一下觀念。RETURNS
TABLE
(
-- Add the column definitions for the TABLE variable here
,
)
內容倒是不多,但是要熟練使用的話,還是需要在項目中多加使用才行。網上有一些網友總結出來的常用自定義函數大家可以收集積累,就像做項目一樣,好的方法要形成所謂的開發庫,幫助我們在下一個項目中復用。節省我們的開發時間,提高我們的工作效率。
總結
以上是生活随笔為你收集整理的php server自定义函数,php:SQL Server用户自定义的函数种类详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 山东省计算机考试无法报名,山东省2017
- 下一篇: php调用美图接口,网易美图 API 接