1. 程式人生 > >sql中的表值函式與標量值函式區別與用法

sql中的表值函式與標量值函式區別與用法

通俗來講:

聽名字就知道區別了 
表值函式返回的是一張表結果,就和一個select查詢語句一樣,只不過裡面帶入了引數或者很複雜;
標量值函式返回的只是一個值

一 、表值函式又分為行內函數與多語句函式

(1)行內函數就是沒有函式主體表是單個 SELECT。

下面是一個不帶輸入引數的表值函式
create function tvpoints()
returns table
as 
return
(
select * from tb_users
);
select * from tvpoints()這個結果返回的是一張表

(2)下面是帶參的內聯表值函式

對於多語句表值函式,在 BEGIN...END 語句塊中定義的函式體包含一系列 Transact-SQL 語句,這些語句可生成行並將其插入將返回的表中。
以下示例建立了一個表值函式.
create function tvpoints()
returns @points table (x float, y float)
as begin
insert @points values(1,2);
insert @points values(3,4);
return;
end

select * from tvpoints2(x,y)查詢到的是一張表

(3)標量函式(返回一個具體型別的值而不是一張表了)

CREATE FUNCTION FUN_DataFormat (@strDate datetime)  
RETURNS varchar(20)  AS  
BEGIN 
    
    declare @date varchar(20)
      set @date = DATENAME(YY,@strDate)+'年'+Convert(VARCHAR,MONTH(@strDate))+'月'+Convert(VARCHAR,DAY(@strDate))+'日'
    return @date
END
可以通過select dbo.FUN_DataFormat(getdate())來使用。(用的時候一定要在函式前面新增一個dbo或者的話資料庫語句報錯的會提示不認識的)