注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

SQL自定义函数  

2013-04-16 22:25:58|  分类: SQL Server |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

“自定义函数”是我们平常的说法,而“用户定义的函数”是 SQL Server 中书面的说法。

SQL Server 2000 允许用户创建自定义函数,自定义函数可以有返回值。

自定义函数分为:标量值函数或表值函数两种。

  • 标量值函数:如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数。
  • 表值函数:如果 RETURNS 子句指定 TABLE,则函数为表值函数。

表值函数又分为两种:内嵌表值函数(行内函数)或多语句函数

  • 如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数。
  • 如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数

如果你不晓得Returns从哪里来,请看创建函数的语法(这里是创建标量值函数的语法)

Create function 函数名(参数)
Returns 返回值数据类型
[with {Encryption | Schemabinding }]
[as]
begin
SQL语句(必须有return 变量或值)
End

这里的with为附加选项:

  • 如果需要对函数体进行加密,可使用WITH ENCRYPTION
  • 果需要将创建的函数与引用的数据库绑定,可以使用WITH SCHEMABINDING(注:函数一旦绑定,则不能删除、修改,除非删除绑定

现在我们就为三种函数分别举个例子看看。

  1. 首先看一个标量值函数
CREATE FUNCTION Foo(@ret int )  --传入了一个int类型的参数
RETURNS int       --注意这里返回的是一个数据类型
AS  
BEGIN 
    declare @n int
    select @n=3
    return @n* @ret
END

函数我们创建好了,怎么调用呢,看看下面

select dbo.foo(2)

结果输出为6,这里需要注意的是:创建函数的时候不需要加dbo.,但在访问的时候,标量函数要加.dbo的,否则的话会报错“不是可以识别的 内置函数名称。”

2.首先看定义一个内嵌表值函数语法:

create function 函数名(参数)
returns table
[with {Encryption | Schemabinding }]
as
return(一条SQL语句)

还是来看个例子比较直观:

create function GetUser(@name varchar(10))
returns table
as
return select * from userInfo where userName=@name

函数创建好了,怎么调用呢

select * from getuser('admin')

上面的sql将会返回一行数据,如果记录存在的话,不存在的话当然就不显示了哈。调用是不是很简单呢。

3,这里就看第三种,多语句表值函数,查看定义:

 --多句表格值函数
   create function 函数名(参数)
   returns 表格变量名table (表格变量定义)
   [with {Encryption | Schemabinding }]
as
   begin
    SQL语句
   end
--多句表格值函数包含多条SQL语句,至少有一条在表格变量中填上数据值

我们来看个例子:

create function GetInfo(@name varchar(20))
returns @cTable table(UserName varchar(10),UserPwd varchar(10))
as
begin
insert into @cTable
select userName,userPass from userinfo where username=@name
return   --函数中最后一条语句必须是返回语句。
end
--调用
select * from GetInfo('admin')
------------
UserName UserPwd
admin     amin

 

对于sql的函数大体都这样了,这里我们来看个例子。

如果我们想在sql 中写一个函数,输入一个参数,返回是1到这个参数的求和值,参数当然是正整数类型的。

于是写了下面这个函数。

create function sumUp(@number int)
returns int
as 
begin
    declare @sum int,@i int;
    select @sum=0;
    select @i=0;
    while @i<=@number
        begin
            select @sum=@sum+@i
            select @i=@i+1
        end
    return @sum
end


注意其 RETURNS 部分。

多语句函数的主体中允许使用以下语句。未在下面的列表中列出的语句不能用在函数主体中。

  • 赋值语句。
  • 控制流语句。
  • DECLARE 语句,该语句定义函数局部的数据变量和游标。
  • SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
  • 游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
  • INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
  • EXECUTE 语句调用扩展存储过程。
  评论这张
 
阅读(490)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016