用户自定义函数:不能用于执行一系列改变数据库状态的操作,但可以像系统函数一样在查询或存储过程
等程序段中使用,也可以像存储过程一样通过execute命令执行。sql server2000中根据函数返回值的不同将用户定义函数分为3种类型:1 标量型函数 不能返回text、ntext、image、cursor、timestamp、table类型,函数体语句定义在begin-end语句内,其中包含了可以返回值的t-sql命令。
2 内嵌表值函数:以表的形式返回值。没有begin-end扩起来的函数体,返回的表由位于return子句中的select命令字段从数据库筛选,功能相当于一个参数化的视图。
3 多语句表值型函数,可以看成以上两种函数的结合体,返回的是一个表,但有begin-end语句括起来的函数体。
标量型自定义函数的创建:create function [owner_name] function_name
(@parameter_name [as] scalar_parameter_date_type[default] [...n]
)
returns scalar_return_date_type
[with [...n] ]
[as]
BEGIN
function_body
RETURN scalar_expression
END
参数说明:owner_name:指定自定义用户的所有者
function:函数名
database_name.owner_name.function_name应该是唯一的
@parameter_name:定义一个或多个参数名称,一个名称最多定义1024个参数,每个参数前用@符号声明。参数作用范围是整个函数,参数只能替代常量,不能替代表名,列名或其他数据库对象名称,用户自定义函数不支持输出参数。
scalar_parameter_data_type:标量型参数的数据类型。(不能用和返回值禁止使用的标量名称)
scalar_return_data_type:标量型返回值的数据类型。(除text、ntext等)
scalar_expression:标量型用户自定义函数返回的标量值表达式。
function_body:指定一系列t—sql语句,决定了函数的返回值。
encryption:加密选项。对function的声明加密,防止用户自定义函数作为sql server复制的一部分而被发布。
schemabinding:函数绑定到它所引用的数据库对象。函数涉及的数据库对象从此将不能被删除或修改。要绑定的数据库对象必须与函数在同一个数据库里面。
内嵌表值的用户自定义函数创建:create function [owner_name.] function_name
(@parameter_name [as] scalar_parameter_date_type[default] [...n]
)
returns table
[with [...n] ]
[as]
RETURN [(] select-stmt [)]
table:指定返回值为一个表
select-stmt:单个select语句,确定返回表的数据。
其他和标量型的参数相似。
多语句表值用户自定义函数:create function [owner_name.] function_name
(@parameter_name [as] scalar_parameter_date_type[default] [...n]
)
returns @return_variable TABLE [WITH[...n]]
AS
BEGIN
function_body
RETURN END
还可以通过企业管理器创建用户自定义函数
在创建的模板语句中把相应的项替换。
修改和删除用户自定义函数:drop function {[owner_name] function_name}[...n]
修改时基本上相当于重建一个同名函数。一般直接在函数当中进行修改。
流程控制语句
BEGIN END语句,将多个t-sql语句组成一个语句块,作为一个单元处理。相当于{},可嵌套。
IF ELSE语句:功能同程序设计语言,也可嵌套。
IF EXISTS语句:返回值不止一个为真
不要把IF EXISTS和聚合函数一起使用,因为聚合函数总是返回数据,即使数据是0。比如返回值的个数,就算为零,IF EXISTS语句也算为真,所以恒真。
WHILE语句:循环语句,continue和break,如果select用于while语句的条件,select语句必须包含在英文括号当中。
CASE表达式:CASE 字段名或变量名
WHEN 逻辑表达式1 THEN 结果表达式1
WHEN 逻辑表达式2 THEN 结果表达式2
ELSE 结果表达式
END
比如:use 工资库
update employee
set e_wage=
case
when job_level="1" then e_wage*1.08
when job_level="2" then e_wage*1.07
when job_level="3" then e_wage*1.06
else e_wage*1.05
end
RETURN语句:无条件终止一个查询,存储过程或批处理。
SQL语言基础(7)
最新推荐文章于 2021-01-27 12:06:00 发布