婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > CREATE FUNCTION sqlserver用戶定義函數

CREATE FUNCTION sqlserver用戶定義函數

熱門標簽:南京電銷外呼系統(tǒng)運營商 山西語音外呼系統(tǒng)價格 重慶防封電銷機器人供應商 北京辦理400電話多少 威海智能語音外呼系統(tǒng) 400電話申請需要開戶費嗎 溫州語音外呼系統(tǒng)代理 西安青牛防封電銷卡 智能語音外呼系統(tǒng)哪個牌子好

創(chuàng)建用戶定義函數,它是返回值的已保存的 Transact-SQL 例程。用戶定義函數不能用于執(zhí)行一組修改全局數據庫狀態(tài)的操作。與系統(tǒng)函數一樣,用戶定義函數可以從查詢中喚醒調用。也可以像存儲過程一樣,通過 EXECUTE 語句執(zhí)行。
用戶定義函數用 ALTER FUNCTION 修改,用 DROP FUNCTION 除去。

語法
標量函數

CREATE FUNCTION [ owner_name.] function_name 
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) 
RETURNS scalar_return_data_type 
[ WITH  function_option> [ [,] ...n] ] 
[ AS ] 
BEGIN 
function_body 
RETURN scalar_expression 
END


內嵌表值函數

CREATE FUNCTION [ owner_name.] function_name 
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) 
RETURNS TABLE 
[ WITH  function_option > [ [,] ...n ] ] 
[ AS ] 
RETURN [ ( ] select-stmt [ ) ] 

多語句表值函數

CREATE FUNCTION [ owner_name.] function_name 
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) 
RETURNS @return_variable TABLE  table_type_definition > 
[ WITH  function_option > [ [,] ...n ] ] 
[ AS ] 
BEGIN 
function_body 
RETURN 
END 
 function_option > ::= 
{ ENCRYPTION | SCHEMABINDING } 
 table_type_definition > ::= 
( { column_definition | table_constraint } [ ,...n ] ) 

參數
owner_name
擁有該用戶定義函數的用戶 ID 的名稱。owner_name 必須是現有的用戶 ID。
function_name
用戶定義函數的名稱。函數名稱必須符合標識符的規(guī)則,對其所有者來說,該名稱在數據庫中必須是唯一的。
@parameter_name
用戶定義函數的參數。CREATE FUNCTION 語句中可以聲明一個或多個參數。函數最多可以有 1,024 個參數。函數執(zhí)行時每個已聲明參數的值必須由用戶指定,除非該參數的默認值已經定義。 如果函數的參數有默認值,在調用該函數時必須指定"default"關鍵字才能獲得默認值。這種行為不同于存儲過程中有默認值的參數,在存儲過程中省略參數也意味著使用默認值。
使用 @ 符號作為第一個字符來指定參數名稱。參數名稱必須符合標識符的規(guī)則。每個函數的參數僅用于該函數本身;相同的參數名稱可以用在其它函數中。參數只能代替常量;而不能用于代替表名、列名或其它數據庫對象的名稱。
scalar_parameter_data_type
參數的數據類型。所有標量數據類型(包括 bigint 和 sql_variant)都可用作用戶定義函數的參數。不支持 timestamp 數據類型和用戶定義數據類型。不能指定非標量類型(例如 cursor 和 table)。
scalar_return_data_type
是標量用戶定義函數的返回值。scalar_return_data_type 可以是 SQL Server 支持的任何標量數據類型(text、ntext、image 和 timestamp 除外)。
scalar_expression
指定標量函數返回的標量值。
TABLE
指定表值函數的返回值為表。
在內嵌表值函數中,通過單個 SELECT 語句定義 TABLE 返回值。內嵌函數沒有相關聯的返回變量。
在多語句表值函數中,@return_variable 是 TABLE 變量,用于存儲和累積應作為函數值返回的行。
function_body
指定一系列 Transact-SQL 語句定義函數的值,這些語句合在一起不會產生副作用。function_body 只用于標量函數和多語句表值函數。
在標量函數中,function_body 是一系列合起來求得標量值的 Transact-SQL 語句。
在多語句表值函數中,function_body 是一系列填充表返回變量的 Transact-SQL 語句。
select-stmt
是定義內嵌表值函數返回值的單個 SELECT 語句。
ENCRYPTION
指出 SQL Server 加密包含 CREATE FUNCTION 語句文本的系統(tǒng)表列。使用 ENCRYPTION 可以避免將函數作為 SQL Server 復制的一部分發(fā)布。
SCHEMABINDING
指定將函數綁定到它所引用的數據庫對象。如果函數是用 SCHEMABINDING 選項創(chuàng)建的,則不能更改(使用 ALTER 語句)或除去(使用 DROP 語句)該函數引用的數據庫對象。
函數與其所引用對象的綁定關系只有在發(fā)生以下兩種情況之一時才被解除:
除去了函數。

在未指定 SCHEMABINDING 選項的情況下更改了函數(使用 ALTER 語句)。
只有在滿足以下條件時,函數才能綁定到架構:
該函數所引用的用戶定義函數和視圖也已綁定到架構。

該函數所引用的對象不是用兩部分名稱引用的。

該函數及其引用的對象屬于同一數據庫。

執(zhí)行 CREATE FUNCTION 語句的用戶對所有該函數所引用的數據庫對象都具有 REFERENCES 權限。
如果不符合以上條件,則指定了 SCHEMABINDING 選項的 CREATE FUNCTION 語句將失敗。
注釋
用戶定義函數為標量值函數或表值函數。如果 RETURNS 子句指定一種標量數據類型,則函數為標量值函數。可以使用多條 Transact-SQL 語句定義標量值函數。
如果 RETURNS 子句指定 TABLE,則函數為表值函數。根據函數主體的定義方式,表值函數可分為行內函數或多語句函數。
如果 RETURNS 子句指定的 TABLE 不附帶列的列表,則該函數為行內函數。行內函數是使用單個 SELECT 語句定義的表值函數,該語句組成了函數的主體。該函數返回的表的列(包括數據類型)來自定義該函數的 SELECT 語句的 SELECT 列表。
如果 RETURNS 子句指定的 TABLE 類型帶有列及其數據類型,則該函數是多語句表值函數。
多語句函數的主體中允許使用以下語句。未在下面的列表中列出的語句不能用在函數主體中。
賦值語句。

控制流語句。

DECLARE 語句,該語句定義函數局部的數據變量和游標。

SELECT 語句,該語句包含帶有表達式的選擇列表,其中的表達式將值賦予函數的局部變量。

游標操作,該操作引用在函數中聲明、打開、關閉和釋放的局部游標。只允許使用以 INTO 子句向局部變量賦值的 FETCH 語句;不允許使用將數據返回到客戶端的 FETCH 語句。

INSERT、UPDATE 和 DELETE 語句,這些語句修改函數的局部 table 變量。

EXECUTE 語句調用擴展存儲過程。
函數的確定性和副作用
函數可以是確定的或不確定的。如果任何時候用一組特定的輸入值調用函數時返回的結果總是相同的,則這些函數為確定的。如果每次調用函數時即使用的是相同的一組特定輸入值,返回的結果總是不同的,則這些函數為不確定的。
不確定的函數會產生副作用。副作用是更改數據庫的某些全局狀態(tài),比如更新數據庫表或某些外部資源,如文件或網絡等(例如,修改文件或發(fā)送電子郵件消息)。
不允許在用戶定義函數主體中內置不確定函數;這些不確定函數如下:

@@CONNECTIONS @@TOTAL_ERRORS
@@CPU_BUSY @@TOTAL_READ
@@IDLE @@TOTAL_WRITE
@@IO_BUSY GETDATE
@@MAX_CONNECTIONS GETUTCDATE
@@PACK_RECEIVED NEWID
@@PACK_SENT RAND
@@PACKET_ERRORS TEXTPTR
@@TIMETICKS  

盡管在用戶定義函數主體中不允許有不確定函數,這些用戶定義函數在調用擴展存儲過程時仍會產生副作用。

由于擴展存儲過程會對數據庫產生副作用,因此調用擴展存儲過程的函數是不確定的。當用戶定義函數調用會對數據庫產生副作用的擴展存儲過程時,不要指望結果集保持一致或執(zhí)行函數。

從函數中調用擴展存儲過程
從函數內部調用時擴展存儲過程無法向客戶端返回結果集。任何向客戶端返回結果集的 ODS API 都將返回 FAIL。擴展存儲過程可以連接回 Microsoft® SQL Server™;但是,它不應嘗試聯接與喚醒調用擴展存儲過程的函數相同的事務。

與從批處理或存儲過程中喚醒調用相似,擴展存儲過程在運行 SQL Server 的 Windows® 安全帳戶的上下文中執(zhí)行。存儲過程的所有者在授予用戶 EXECUTE 特權時應考慮這一點。

函數調用
在可使用標量表達式的位置可喚醒調用標量值函數,包括計算列和 CHECK 約束定義。當喚醒調用標量值函數時,至少應使用函數的兩部分名稱。

[database_name.]owner_name.function_name ([argument_expr][,...])

如果用戶定義函數用于定義計算列,則該函數的確定性同樣決定了是否可在該計算列上創(chuàng)建索引。只有當函數具有確定性時,才可以在使用該函數的計算列上創(chuàng)建索引。如果在輸入相同的情況下函數始終返回相同的值,則該函數具有確定性。

可以使用由一部分組成的名稱喚醒調用表值函數。

[database_name.][owner_name.]function_name ([argument_expr][,...])

對于 Microsoft® SQL Server™ 2000 中包含的系統(tǒng)表函數,喚醒調用時需在函數名的前面加上前綴"::"。

SELECT *
FROM ::fn_helpcollations()

對于導致語句停止執(zhí)行然后從存儲過程中的下一語句繼續(xù)執(zhí)行的 Transact-SQL 錯誤,在函數中的處理方式不同。在函數中,這類錯誤會導致函數停止執(zhí)行。這反過來使喚醒調用該函數的語句停止執(zhí)行。

權限
用戶應具有執(zhí)行 CREATE FUNCTION 語句的 CREATE FUNCTION 權限。

CREATE FUNCTION 的權限默認地授予 sysadmin 固定服務器角色和 db_owner 和 db_ddladmin 固定數據庫角色的成員。sysadmin 和 db_owner 的成員可用 GRANT 語句將 CREATE FUNCTION 權限授予其它登錄。

函數的所有者對其函數具有 EXECUTE 權限。其他用戶不具有 EXECUTE 權限,除非給他們授予了特定函數上的 EXECUTE 權限。

若要創(chuàng)建或更改在 CONSTRAINT、DEFAULT 子句或計算列定義中引用了用戶定義函數的表,用戶還必須對這些函數有 REFERENCES 權限。

示例
A. 計算 ISO 周的標量值用戶定義函數
下例中,用戶定義函數 ISOweek 取日期參數并計算 ISO 周數。為了正確計算該函數,必須在調用該函數前喚醒調用 SET DATEFIRST 1。

CREATE FUNCTION ISOweek (@DATE datetime) 
RETURNS int 
AS 
BEGIN 
DECLARE @ISOweek int 
SET @ISOweek= DATEPART(wk,@DATE)+1 
-DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104') 
--Special cases: Jan 1-3 may belong to the previous year 
IF (@ISOweek=0) 
SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1 
AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1 
--Special case: Dec 29-31 may belong to the next year 
IF ((DATEPART(mm,@DATE)=12) AND 
((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28)) 
SET @ISOweek=1 
RETURN(@ISOweek) 
END

下面是函數調用。注意 DATEFIRST 設置為 1。

SET DATEFIRST 1
SELECT master.dbo.ISOweek('12/26/1999') AS 'ISO Week'
下面是結果集。

ISO Week
----------------
52

B. 內嵌表值函數
下例返回內嵌表值函數。

USE pubs 
GO 
CREATE FUNCTION SalesByStore (@storeid varchar(30)) 
RETURNS TABLE 
AS 
RETURN (SELECT title, qty 
FROM sales s, titles t 
WHERE s.stor_id = @storeid and 
t.title_id = s.title_id)

C. 多語句表值函數
假設有一個表代表如下的層次關系:

CREATE TABLE employees (empid nchar(5) PRIMARY KEY, 
empname nvarchar(50), 
mgrid nchar(5) REFERENCES employees(empid), 
title nvarchar(30) 
) 

表值函數 fn_FindReports(InEmpID) 有一個給定的職員ID,它返回與所有直接或間接向給定職員報告的職員相對應的表。該邏輯無法在單個查詢中表現出來,不過可以實現為用戶定義函數。

CREATE FUNCTION fn_FindReports (@InEmpId nchar(5)) 
RETURNS @retFindReports TABLE (empid nchar(5) primary key, 
empname nvarchar(50) NOT NULL, 
mgrid nchar(5), 
title nvarchar(30)) 
/*Returns a result set that lists all the employees who report to given 
employee directly or indirectly.*/ 
AS 
BEGIN 
DECLARE @RowsAdded int 
-- table variable to hold accumulated results 
DECLARE @reports TABLE (empid nchar(5) primary key, 
empname nvarchar(50) NOT NULL, 
mgrid nchar(5), 
title nvarchar(30), 
processed tinyint default 0) 
-- initialize @Reports with direct reports of the given employee 
INSERT @reports 
SELECT empid, empname, mgrid, title, 0 
FROM employees 
WHERE empid = @InEmpId 
SET @RowsAdded = @@rowcount 
-- While new employees were added in the previous iteration 
WHILE @RowsAdded > 0 
BEGIN 
/*Mark all employee records whose direct reports are going to be 
found in this iteration with processed=1.*/ 
UPDATE @reports 
SET processed = 1 
WHERE processed = 0 
-- Insert employees who report to employees marked 1. 
INSERT @reports 
SELECT e.empid, e.empname, e.mgrid, e.title, 0 
FROM employees e, @reports r 
WHERE e.mgrid=r.empid and e.mgrid > e.empid and r.processed = 1 
SET @RowsAdded = @@rowcount 
/*Mark all employee records whose direct reports have been found 
in this iteration.*/ 
UPDATE @reports 
SET processed = 2 
WHERE processed = 1 
END 

-- copy to the result of the function the required columns 
INSERT @retFindReports 
SELECT empid, empname, mgrid, title 
FROM @reports 
RETURN 
END 
GO 

-- Example invocation 
SELECT * 
FROM fn_FindReports('11234') 
GO

您可能感興趣的文章:
  • sqlserver中的自定義函數的方法小結
  • Sqlserver 自定義函數 Function使用介紹
  • SQL Server自定義異常raiserror使用示例
  • 詳解SQL Server數據庫架構和對象、定義數據完整性
  • Sql Server的一些知識點定義總結

標簽:貸款群呼 濟寧 河源 新余 中衛(wèi) 金昌 宜春 黃山

巨人網絡通訊聲明:本文標題《CREATE FUNCTION sqlserver用戶定義函數》,本文關鍵詞  CREATE,FUNCTION,sqlserver,用戶,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《CREATE FUNCTION sqlserver用戶定義函數》相關的同類信息!
  • 本頁收集關于CREATE FUNCTION sqlserver用戶定義函數的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品视频第一区| 欧美性视频一区二区三区| 日韩一区二区在线免费观看| 国产精品久线观看视频| 久久精品国产亚洲5555| 欧美精品久久天天躁| 一区二区三区四区激情| 97精品电影院| 国产 欧美在线| 日韩精品在线看片z| 婷婷一区二区三区| 欧美区在线观看| 亚洲国产sm捆绑调教视频| 欧美精品丝袜久久久中文字幕| 亚洲国产成人高清精品| 欧美日韩国产a| 日日夜夜一区二区| 欧美精品丝袜久久久中文字幕| 天使萌一区二区三区免费观看| 欧美日韩一区三区| 日日欢夜夜爽一区| 欧美一区二区观看视频| 国产一区二区久久| 久久精品国产亚洲一区二区三区 | 亚洲v中文字幕| 色呦呦日韩精品| 亚洲一区在线观看视频| 欧美高清www午色夜在线视频| 日韩国产欧美在线视频| 欧美一卡2卡3卡4卡| 精品系列免费在线观看| 国产欧美日本一区视频| 99精品国产视频| 午夜精品爽啪视频| 久久久久久久久久久久久女国产乱| 国产91对白在线观看九色| 亚洲精品久久嫩草网站秘色| 欧美一区二区三区在线看| 国产中文字幕精品| 亚洲综合久久久久| 2021久久国产精品不只是精品| www.成人网.com| 美女一区二区久久| 中文字幕一区二区不卡 | 欧美激情艳妇裸体舞| 日本韩国精品一区二区在线观看| 日本色综合中文字幕| 亚洲区小说区图片区qvod| 精品国产网站在线观看| 91美女片黄在线观看91美女| 国产精品99久| 免费成人av在线播放| 亚洲成a人片在线不卡一二三区| 国产精品午夜在线| 日韩欧美视频在线| 在线成人免费视频| 在线不卡一区二区| 欧美做爰猛烈大尺度电影无法无天| 国产激情91久久精品导航 | 亚洲欧美日本韩国| 中文幕一区二区三区久久蜜桃| 日韩精品一区二区三区视频| 国产精品传媒在线| 久久久久国产精品麻豆ai换脸| 91麻豆精品国产自产在线| 欧美中文字幕不卡| 91久久久免费一区二区| 91亚洲国产成人精品一区二三| 国产乱码字幕精品高清av| 精品在线一区二区三区| 极品少妇xxxx偷拍精品少妇| 久久99久久久欧美国产| 国产乱码精品一区二区三区av| 国产乱色国产精品免费视频| 国产原创一区二区| 粉嫩av一区二区三区| 中文字幕乱码一区二区免费| 国产精品久久久久aaaa樱花| 亚洲精品中文在线影院| 亚洲制服丝袜av| 日本成人在线看| 国产91清纯白嫩初高中在线观看| av不卡免费电影| 欧美日韩美女一区二区| 精品国产乱码久久久久久图片 | 成人免费在线播放视频| 一区二区三区四区激情| 日韩精品国产欧美| 国产酒店精品激情| 91福利在线免费观看| 婷婷丁香久久五月婷婷| 国产露脸91国语对白| 欧美在线|欧美| 日韩精品一区二区三区老鸭窝 | 日韩精品在线看片z| 国产精品另类一区| 亚洲午夜久久久久久久久电影网| 久色婷婷小香蕉久久| 色综合激情久久| 精品电影一区二区| 色综合久久精品| 91精品国产麻豆国产自产在线| 国产欧美视频一区二区| 日本亚洲一区二区| 在线观看日韩国产| 日韩毛片精品高清免费| 激情欧美日韩一区二区| 欧美精品电影在线播放| 亚洲女爱视频在线| jizz一区二区| 2021久久国产精品不只是精品| 尤物av一区二区| 丁香激情综合五月| 久久久久久久综合色一本| 水野朝阳av一区二区三区| 99精品视频在线观看免费| 国产校园另类小说区| 日本不卡视频在线| 欧美日韩小视频| 亚洲一区视频在线| 91啪亚洲精品| 亚洲欧洲日本在线| 成人涩涩免费视频| 中文幕一区二区三区久久蜜桃| 国产一区二区成人久久免费影院| 日韩视频一区二区三区 | 欧美影视一区二区三区| 亚洲美女偷拍久久| 欧美日韩你懂的| 偷窥少妇高潮呻吟av久久免费| 欧美色手机在线观看| 首页综合国产亚洲丝袜| 欧美色男人天堂| 视频一区免费在线观看| 欧美精品三级日韩久久| 日韩精品一卡二卡三卡四卡无卡| 欧美日韩一区二区电影| 日韩av电影免费观看高清完整版在线观看| 欧美日韩国产免费一区二区| 石原莉奈在线亚洲三区| 久久亚洲综合色一区二区三区 | 日本欧美一区二区在线观看| 日韩欧美激情在线| 成人性视频网站| 亚洲在线成人精品| 性做久久久久久免费观看欧美| 欧美体内she精高潮| 蜜桃视频一区二区三区| 国产精品护士白丝一区av| 欧美这里有精品| 精品一区二区免费在线观看| 精品不卡在线视频| 国产成人精品在线看| 亚洲欧美另类图片小说| 欧美日本乱大交xxxxx| 九九精品视频在线看| 亚洲精品五月天| 久久综合九色综合97婷婷女人| 91在线国产观看| 日日噜噜夜夜狠狠视频欧美人 | 久久精品国产亚洲a| 国产精品私人自拍| 日韩欧美一区电影| 99久久久国产精品| 亚洲女人的天堂| 久久精品视频网| 欧美久久久久中文字幕| 成人成人成人在线视频| 激情综合亚洲精品| 亚洲成人在线免费| 中文久久乱码一区二区| 久久亚洲精品小早川怜子| 欧美一卡二卡在线观看| 欧美日韩在线一区二区| 色久综合一二码| www.综合网.com| 处破女av一区二区| 国产老女人精品毛片久久| 亚洲国产精品麻豆| 国产欧美一区在线| 久久久久久久综合| 精品国产乱码久久久久久夜甘婷婷| 欧美性一级生活| 成人av网站大全| 另类成人小视频在线| 亚洲欧洲精品天堂一级 | 99久久国产免费看| 蜜乳av一区二区| 94-欧美-setu| 日韩精品中文字幕一区 | 国产精品视频观看| 午夜精品久久久久久| 粉嫩高潮美女一区二区三区 | 中文字幕精品在线不卡| 亚洲一区二区三区四区的| 捆绑调教美女网站视频一区| 91同城在线观看| 欧美成人猛片aaaaaaa| 亚洲综合视频网| 国产成人鲁色资源国产91色综|