现在的位置: 首页 > 综合 > 正文

函数

2013年07月06日 ⁄ 综合 ⁄ 共 2383字 ⁄ 字号 评论关闭

函数可以通过查询中唤醒调用,也可以像存储过程一样,通过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)
结果:
image 

内嵌表值函数(返回数据库表内容):
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)
结果:
image 

多语句表值函数(根据多表,返回自定义表内容):
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结构如下:
image 
表Products结构如下:
image 
代码:
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()

抱歉!评论已关闭.