1. 程式人生 > 其它 >SQL Server 自定義函式

SQL Server 自定義函式

函式的定義

  • 標量值函式返回的是一個標量值
  • 表值函式返回的是一個查詢結果集

自定義函式型別

  • 標量值函式
  • 表值函式:又分為2種不同寫法
    • 內聯表值函式
    • 多語句表值函式

函式的建立

  • 標量值函式的語法:RETURNS 返回的是結果的型別
CREATE FUNCTION FUNCTION_NAME(@para_name para_type) RETURNS 返回值型別
[AS]
Begin
	.......
	return @xx
end
  • 表值函式(內聯表值函式)的語法:RETURNS 返回的是table(表)
CREATE FUNCTION FUNCTION_NAME(@para_name para_type) RETURNS table
[AS]
	return select * from xxx
  • 表值函式(多語句表值)的語法:RETURNS 返回的是table(表)
CREATE FUNCTION FUNCTION_NAME(@para_name para_type)
RETURNS @Table_Variable_Name table (Column_1 culumn_type,Column_2 culumn_type)
--RETURNS @表變數 table 表的定義(即列的定義和約束)
[AS]
BEGIN
     函式體(即 Transact-SQL 語句)
 RETURN  
END

例項

  • 標量值函式:獲取使用者年齡
CREATE FUNCTION GetAge(@birth smalldatetime) RETURNS varchar(20)
AS
BEGIN
DECLARE @age INT
SET @age = year(GETDATE())- year(@birth)

--如果當前月份比生日月份小,那麼年齡減1
if MONTH(GETDATE()) < MONTH(@birth)
	set @age = @age -1
--如果當前月份和生日月份一樣,就比較天,天數小就減去1
if MONTH(GETDATE()) = MONTH(@birth) AND DAY(GETDATE()) < DAY(@birth)
	SET @age = @age -1

RETURN convert(varchar(10),@age)+'歲'


END
  • 表值函式,根據學號獲取學生資訊
CREATE FUNCTION GetInfo(@sid varchar(20)) RETURNS table
AS
return
select * from Student where sid = @sid