原文:
sql錶值函式和標量值函式的區別
寫sql儲存過程經常需要呼叫一些函式來使處理過程更加合理,也可以使函式復用性更強,不過在寫sql函式的時候可能會發現,有些函式是在錶值函式下寫的有些是在標量值下寫的,區別是錶值函式只能返回乙個表,標量值函式可以返回基型別。舉個例子,當使用者刪除乙個節點的時候,是需要將當前節點下的所有子節點都刪掉,如果程式只傳乙個當前節點,那就需要寫乙個函式來得到當前節點下的所有子節點,這些子節點的資訊就可以放到乙個表中返回。
[sql]view plain
copy
alter
function
testgetsubnodes
( @nodeid int
) returns
@t table
( id bigint
identity(1,1)
notnull
,
nodeids int
, nodename varchar
(500)
) as
begin
insert
into
@t values
(@nodeid,
'header'
);
while exists(select
nodeid
from
dbo.tree
where
parentid in(
select
nodeids
from
@t)
andnodeid
notin
(select
nodeids
from
@t))
begin
insert
into
@t select
nodeid, nodename
from
dbo.tree
where
parentid in(
select
nodeids
from
@t)
endreturn
end
這個函式的主要功能就是返回當前節點下的所有子節點,在儲存過程中寫select * from testgetsubnodes(nodeid)就可以返回表中的資料了。再寫乙個標量值函式
[sql]view plain
copy
alter
function
[dbo].[testgetsubnodes_]
( @nodeid int
) returns
intas
begin
declare
@nodecount
intselect
@nodecount=5
from
menutree
return
@nodecount
end
這個函式很簡單返回乙個整型值,然後就可以在儲存過程中呼叫了,不過呼叫的方式有所不同,象上面的錶值函式呼叫是不需要所有者的,只要寫函式名稱就可以,對於標量值函式來說,是需要加上所有者的,比如所有者是dboselect dbo.testgetsubnodes_,這樣就可以返回5,如果不加dbo,那sql會不認識這個函式。
SQL 標量值函式的呼叫
呼叫 ms sql 標量值函式,應該在函式前面加上 dbo.否則會報 不是可以識別的 內建函式名稱 錯誤。例如 declare whichdb tinyint select whichdb dbo.user getwhichdb 1 看看是哪個資料庫的 另外,標量值函式就相當於乙個變數,而不是乙個表...
sql的標量值函式例子
1.分割字串,處理某個字元第幾次出現獲取後面的值use ef go object userdefinedfunction dbo f substr script date 10 27 2014 20 36 10 set ansi nulls on goset quoted identifier on...
標量值函式的用法
昨天做乙個前台顯示,就是資料庫有4個字段都是int型,需要前台把它們合成乙個字段輸出。本來想著在資料庫在加一列,後來有人提議用標量值函式,發現這樣挺好的。拿來分享一下。首先新建查詢複製下面 code set ansi nulls on go set quoted identifier on go c...