sql server 自定義函數的使用

sql server 自定義函數的使用

自定義函數

?

用戶定義自定義函數像內置函數一樣返回標量值,也可以將結果集用表格變量返回

用戶自定義函數的類型:

標量函數:返回一個標量值

表格值函數{內聯表格值函數、多表格值函數}:返回行集(即返回多個值)

?

1、標量函數

Create function 函數名(參數)

Returns 返回值數據類型

[with {Encryption | Schemabinding }]

[as]

begin

SQL語句(必須有return 變量或值)

?

End

?

Schemabinding :將函數綁定到它引用的對象上(注:函數一旦綁定,則不能刪除、修改,除非刪除綁定)

?

?

Create function AvgResult(@scode varchar(10))

Returns real

As

Begin

?? Declare @avg real

?? Declare @code varchar(11)

?? Set @code=@scode + ‘%’

?? Select @avg=avg(result) from LearnResult_baijiali

Where scode like @code

Return @avg

End

?

執行用戶自定義函數

select 用戶名。函數名 as 字段別名

select dbo.AvgResult(‘s0002’) as result

?

用戶自定義函數返回值可放到局部變量中,用set ,select,exec賦值

declare @avg1 real ,@avg2 real ,@avg3 real

select @avg1= dbo.AvgResult(‘s0002’)

set @avg2= dbo.AvgResult(‘s0002’)

exec @avg3= dbo.AvgResult ‘s0002’

select @avg1 as avg1 ,@avg2 as avg2 ,@avg3 as avg3

?

函數引用

?

create function code(@scode varchar(10))

returns varchar(10)

as

begin

declare @ccode varchar(10)

set @scode = @scode + ‘%’

select @ccode=ccode from cmessage

?? where ccode like @scode

return @ccode

end

?

select name from class where ccode = dbo.code(‘c001’)

?

2、表格值函數

a、 內聯表格值函數

格式:

create function 函數名(參數)

returns table

[with {Encryption | Schemabinding }]

as

return(一條SQL語句)

?

create function tabcmess(@code varchar(10))

returns table

as

return(select ccode,scode from cmessage where ccode like @ccode)

?

b、 多句表格值函數

?? create function 函數名(參數)

?? returns 表格變量名table (表格變量定義)

?? [with {Encryption | Schemabinding }]

as

?? begin

??? SQL語句

?? end

?

?多句表格值函數包含多條SQL語句,至少有一條在表格變量中填上數據值

?表格變量格式

returns @變量名 table (column 定義| 約束定義 [,…])

對表格變量中的行可執行select,insert,update,delete , 但select into 和 insert 語句的結果集是從存儲過程插入。

?

Create function tabcmessalot (@code varchar(10))

Returns @ctable table(code varchar(10) null,cname varchar(100) null)

As

Begin

Insert @ctable

Select ccode,explain from cmessage

Where scode like @code

return

End

?

Select * from tabcmessalot(‘s0003’)

?

來自:http://hi.baidu.com/datachina/blog/item/801def0366c4e7ea09fa9344.html

下面是我從別的地方弄的一個例子,淺顯易懂:

編寫一個函數,該函數,可以通過輸入借書時間來判斷是否到期,當借閱時間大于30天,返回已經過期;否則返回還未到期。

CREATE FUNCTION IsDateout(@BDate datetime)
returns nvarchar(20)
AS
BEGIN
??? DECLARE @myresult nvarchar(20)
??? IF (datediff(day,@BDate,getdate())>30)
??? BEGIN
??? SET @myresult='已過期'
??? end
??? else???
??? begin
??? set @myresult='未到期'
??? end
??? RETURN (@myresult)
END

SELECT dbo.IsDateout(cast('2009-12-17' AS datetime))--結果已過期
SELECT dbo.IsDateout(cast('2010-12-17' AS datetime))--結果未到期

轉載于:https://www.cnblogs.com/firstdream/p/5168002.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375107.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375107.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375107.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

怎么設置才能讓外網ip可以訪問mysql數據庫[轉]

轉自: http://www.hongyanliren.com/89.html 使用mysql中,很多人都會遇到這樣的問題:在vps服務器或者云服務器上安裝了mysql后,使用其他工具在外網ip之下根本就連接不上mysql,到底是什么原因導致外網ip無法訪問mysql數…

Java 自帶MD5 校驗文件

http://www.iteye.com/topic/1127319 前天第一次發表博客到論壇,關于Java文件監控一文,帖子地址在:http://www.iteye.com/topic/1127281 評論的朋友很多,下載代碼的朋友很不少,感謝在論壇上看我帖子的朋友,…

決策樹資料匯總

2012年8月26日決策樹(Decision tree)決策樹是以實例為基礎的歸納學習算法。它從一組無次序、無規則的元組中推理出決策樹表示形式的分類規則。它采用自頂向下的遞歸方式,在決策樹的內部結點進行屬性值的比較,并根據不同的屬性值從…

metasploitable2滲透測試

一、系統弱密碼登錄 1、在kali上執行命令行telnet 192.168.26.129 2、Login和password都輸入msfadmin 3、登錄成功,進入系統 4、測試如下: 二、MySQL弱密碼登錄: 1、在kali上執行mysql –h 192.168.26.129 –u root 2、登錄成功&#…

Portainer.io:讓容器管理變得更加直觀

在現代軟件開發和部署中,容器化技術已經變得越來越流行。Docker 是其中一種領先的容器化平臺,而 Portainer.io 則是一個優秀的管理工具,使得 Docker 的使用變得更加簡單和可視化。本文將介紹 Portainer.io 的基本功能和如何在 Docker 上安裝和…

倉庫信息查詢練習

use cangku create table cangkubiao ( cno varchar(50) primary key not null, city varchar(50)not null, mianji int not null ) insert into cangkubiao values(wh1,北京,370) insert into cangkubiao values(wh2,上海,500) insert into cangkubiao values(wh3,廣州,200) …

python開發的一些tips

1. Notepad編寫python腳本 1)新建文件,編寫代碼 2)點擊菜單欄,“語言”—>“P”—>“Python”,設置腳本為Python語言的高亮(這樣保存文本的時候,Notepad也可以自動識別文件類型為.py&…

metasploitable3滲透測試

1、攻擊windows服務器漏洞 用nmap對網段進行掃描nmap -sP 192.168.123 在進行IP掃描 發現Windows服務器漏洞 步驟: msfconsole---進入滲透模塊

以前寫的一個下載小說的工具

因為當時發現只有一個站點有。但是時時聯網的要求太讓人不爽。就寫了一個給全下下來了。 用到了: 1. 正則表達式,分析章節和內容; 2. 線程池下載,并且對下載中的相關超時做了一些處理; 3. 文件生成與寫入,注意格式問題…

數學之路-python計算實戰(14)-機器視覺-圖像增強(直方圖均衡化)

我們來看一個灰度圖像,讓表示灰度出現的次數,這樣圖像中灰度為 的像素的出現概率是是圖像中全部的灰度數, 是圖像中全部的像素數, 實際上是圖像的直方圖,歸一化到 。把 作為相應于 的累計概率函數, 定義為:是圖像的…

Windows2008的安裝

點擊下一步 點擊安裝 選擇第三個,點擊下一步 點擊下一步 點自定義安裝 我在這里分兩個盤并格式化 接下來就是等待安裝完成即可

Ubuntu下在Apache中運行Keystone

最近一次從Github上更新Keystone的代碼后,發現原來bin/keystone-all和bin/keystone-manage都不見了,取而代之的是keystone/cmd/目錄下的all.py和manage.py兩個python腳本.雖然在測試的virtualenv環境下仍然可以執行原來的命令,但是想試著在Apache中運行Keystone,畢竟這已經是社…

redhat linux7.0的安裝

選擇第一個 我選擇中文 點擊開始安裝 設置root用戶密碼 完成如上圖所示 我在網上找了一個redhat7.0鏡像供大家使用 鏈接:https://pan.baidu.com/s/1WhG8BGZTZawDKTNlaAvzRg 提取碼:uzpd

鳥哥

bc計算器 scale4 小數是4位 whatis ls make what is ls --helpman lsman -k passinfo pass [rootcentos01 ~]# ls /etc/init.d/ #服務所在的文件夾 [rootcentos01 ~]# runlevel #查找自己在哪個級別 n 表示上一個沒有N 5-bash-4.1# init 3 #切換到3級別的服務 級別0 關機模式級…

[奇葩 bug]視圖在 ipad5 上正常顯示,在 iPad3上超出了邊界

一,問題分析 1.理論上 iPad 是按像素點排列的,可 iPad5為什么和 iPad3差別那么大??? 2.iPad3超出邊界的視圖,都有一個 leading 是superview 的 leading 加上-20.感覺是這個地方有問題. 3.重新添加一下約束,去掉了那個默認的 constraint 選項,就沒有那個-20的差值了.運行后發…

VMware虛擬機安裝

創建新的虛擬機:在 VMWare 中創建虛擬機,要求設置內存大小為 1G,CPU 為 2,硬盤大小自行選擇,網絡連接采用 NAT 模式,其他保持默認即可 上面是安裝啥系統就選啥系統 下一步 下一步 磁盤大小按自己需求來

二叉樹算法:中序、后序推導先序(數組遞歸實現 【*模板】)

中根序列和后根序列重建二叉樹 描述我們知道如何按照三種深度優先次序來周游一棵二叉樹,來得到中根序列、前根序列和后根序列。反過來,如果給定二叉樹的中根序列和后根序 列,或者給定中根序列和前根序列,可以重建一二叉樹。本題輸…

福昕熊雨前:PDFium開源項目的背后

今天編譯android的時候,無意中看到命令行提示出輸出編譯external/pdfium這個目錄,于是乎上百度搜索了一下,找到了如下關于PDF文件解析的開源代碼的文章: http://www.csdn.net/article/2014-06-23/2820351-Why-Foxit-Open-Sourced-…

Windows主機安全加固

Windows主機安全加固 賬戶安全 更名administrator本地用戶并禁用guest賬戶步驟: 點擊“開始”,找到“管理工具”,點擊里面的“計算機管理”,找到“本地用戶和組”

JS筆記 入門第四

小測試:注意:取消所有的設定可以直接使用document.getElementById("txt").removeAttribute("style");這個是個神奇的東西.<!DOCTYPE HTML><html><head><meta http-equiv"Content-Type" Content"text/html; charsetutf…