函数
函数可以通过查询中唤醒调用,也可以像存储过程一样,通过Execute语句执行.
创建用户函数:create function
修改用户函数: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
参数解释:
owner_name拥有该用户定义函数的用户ID的名称,owner_name必须是现有的用户ID.function_name函数名.对于其所有者来说,该函数名称在数据库中应该是唯一的.@parameter_name函数的参数.CREATE FUNCTION语句中可以声明一个或多个参数,最多可有1024个参数.函数执行时,每个已声明的参数必须由用户指定参数值(除非该参数已有默认值),如果函数的参数有默认值,在调用该函数时,必须制定default关键字才能获得默认值.这种行为不同于储存过程中有默认值的参数,在存储过程中,省略参数也意味着使用默认值.使用@符号作为第一个字符来指定参数名称.每个函数的参数仅用于该函数本身,参数执行代表常量,而不能代表表名,列名或其他数据库对象的名称.scalar_parameter_data_type参数的数据类型.function_body指定一系列SQL语句定义函数的值.scalar_expression函数返回的标量值
以下为例子,使用Northwind数据库
返回整数类型数据:
CREATE function dbo.getResult ( @flag bit ) returns nvarchar(10) as begin declare @result nvarchar(10) if(@flag=0) set @result='no' else set @result='yes' return @result end执行:select dbo.getResult(1) select dbo.getResult(0)结果:
内嵌表值函数(返回数据库表内容):
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 [ ) ]
参数解释:
TABLE指定返回值为表.select-stmt定义内嵌表值函数返回值的单个SELECT语句.
例子,返回表:
CREATE FUNCTION dbo.getEmployees ( @employeeid int ) RETURNS TABLE as return (select * from employees where employeeid<@employeeid)执行:
select * from dbo.getEmployees(5)结果:
多语句表值函数(根据多表,返回自定义表内容):
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 ] )
例子:
使用Northwind数据库.
表Categories结构如下:表Products结构如下:
代码:
create FUNCTION dbo.sFn_tmpwww ( ) RETURNS @definewww table ( productName nvarchar(40), categoryname nvarchar(15) ) AS BEGIN insert @definewww (productName,categoryname) ( select ProductName,CategoryName from products inner join Categories on products.CategoryID=categories.CategoryID ) RETURN END
执行函数:
exec [databse_name.]owername.functionname([arguments][,...])对于表,可以select * from [databse_name.]owername.functionname([arguments][,...])对于简单数据,可以select [databse_name.]owername.functionname([arguments][,...])对于 Microsoft® SQL Server™ 2000 中包含的系统表函数,唤醒调用时需在函数名的前面加上前缀"::"。
SELECT * FROM ::fn_helpcollations()