SQLServer之创建表值函数

数字漫游者
• 阅读 2286

表值函数创建注意事项

用户定义表值函数返回 table 数据类型。
对于内联表值函数,没有函数主体,表是单个 SELECT 语句的结果集。
表值函数主要用于数据计算出来返回结果集。
使用SSMS数据库管理工具和T-SQL脚本创建表值函数语法相同。

使用T-SQL脚本创建表值函数

语法:

语法一:

--声明数据库引用
use 数据库名;
go

--判断是否存在表值函数,如果存在则删除,不存在则创建
if exists(select * from sys.objects where name=表值函数名称)
drop function 表值函数名称;
go

--创建表值函数
create functino [schema_name.] function_name
(@parameter_name [as] [type_schema_name.] parameter_data_type [ = default ] [ readonly],..n)
returns table
[with] encryption[schemabinding]
as
return [ ( ] select_stmt [ ) ]
go

语法二:

--声明数据库引用
use 数据库名;
go

--判断是否存在表值函数,如果存在则删除,不存在则创建
if exists(select * from sys.objects where name=表值函数名称)
drop function 表值函数名称;
go

--创建表值函数
create functino [schema_name.] function_name
(@parameter_name [as] [type_schema_name.] parameter_data_type [ = default ] [ readonly],..n)
returns @tablename table
(
@parameter_name [as] [type_schema_name.] parameter_data_type [ = default ] ,
...n
)
begin
insert into @tablename(参数1,参数2,...n)
select 参数1,参数2,...n from table
[inner | left | right] [join] [table] [on] [条件]
[where 条件]
[group by 条件]
[having 条件]
[order by 条件]
;
return
end;
go

语法解析:

--schema_name
--用户定义函数所属的架构的名称。

--function_name
--用户定义函数的名称。 函数名称必须符合标识符规则,并且在数据库中以及对其架构来说是唯一的,即使未指定参数,函数名称后也需要加上括号。

--@parameter_name
--用户定义函数中的参数。 可声明一个或多个参数。
--一个函数最多可以有 2,100 个参数。 执行函数时,如果未定义参数的默认值,则用户必须提供每个已声明参数的值。
--通过将 at 符号 (@) 用作第一个字符来指定参数名称。 参数名称必须符合标识符规则。 参数是对应于函数的局部参数;其他函数中可使用相同的参数名称。
--参数只能代替常量,而不能用于代替表名、列名或其他数据库对象的名称。

--[ type_schema_name. ] parameter_data_type
--参数的数据类型及其所属的架构,后者为可选项。 对于 Transact-SQL 函数,允许使用除 timestamp 数据类型之外的所有数据类型(包括 CLR 用户定义类型和用户定义表类型)。
--对于 CLR 函数,允许使用除 text、ntext、image、用户定义表类型和 timestamp 数据类型之外的所有数据类型(包括 CLR 用户定义类型)。 在 Transact-SQL 函数或 CLR 函数中,
--不能将非标量类型 cursor 和 table 指定为参数数据类型。
--如果未指定 type_schema_name, 数据库引擎会按以下顺序查找 scalar_parameter_data_type:
--包含 SQL Server 系统数据类型名称的架构。
--当前数据库中当前用户的默认架构。
--当前数据库中的 dbo 架构。

--[ =default ]
--参数的默认值。 如果定义了 default 值,则无需指定此参数的值即可执行函数。
--如果函数的参数有默认值,则调用该函数以检索默认值时,必须指定关键字 DEFAULT。 此行为与在存储过程中使用具有默认值的参数不同,在后一种情况下,不提供参数同样意味着使用默认值。
--但在通过使用 EXECUTE 语句调用标量函数时,DEFAULT 关键字不是必需的。

--readonly
--指示不能在函数定义中更新或修改参数。 如果参数类型为用户定义的表类型,则应指定 READONLY。

--return_data_type
--标量用户定义函数的返回值。 对于 Transact-SQL 函数,可以使用除 timestamp 数据类型之外的所有数据类型(包括 CLR 用户定义类型)。
--对于 CLR 函数,允许使用除 text、ntext、image 和 timestamp 数据类型之外的所有数据类型(包括 CLR 用户定义类型)。 在 Transact-SQL 函数或 CLR 函数中,不能将非标量类型 cursor 和 table 指定为返回数据类型。

--encryption
--适用范围: SQL Server 2008 到 SQL Server 2017。
--指示 数据库引擎会将 CREATE FUNCTION 语句的原始文本转换为模糊格式。 模糊代码的输出在任何目录视图中都不能直接显示。 对系统表或数据库文件没有访问权限的用户不能检索模糊文本。
--但是,可以通过 DAC 端口访问系统表的特权用户或直接访问数据库文件的特权用户可以使用此文本。 此外,能够向服务器进程附加调试器的用户可在运行时从内存中检索原始过程。
--使用此选项可防止将函数作为 SQL Server 复制的一部分发布。 不能为 CLR 函数指定此选项。

--schemabinding
--指定将函数绑定到其引用的数据库对象。 如果指定了 SCHEMABINDING,则不能按照将影响函数定义的方式修改基对象。 必须首先修改或删除函数定义本身,才能删除将要修改的对象的依赖关系。

--@tablename
--自定义表名

调用语法:

select 参数名 from [架构名.]函数名称 ;

示例:

--声明数据库引用
use testss;
go

--判断是否存在表值函数,如果存在则删除
if exists(select * from sys.objects where name='tablefun')
drop function tablefun;
go

--创建表值函数
create function dbo.tablefun(@ids int=null)
returns table
with encryption,schemabinding
as
return (select id,name,sex,age,classid,height from dbo.test1 where id=@ids);
go

示例结果:依次显示创建结果和调用结果。

SQLServer之创建表值函数

SQLServer之创建表值函数

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
SQL中的函数
概括:函数是由一个或多个TSQL语句组成的子程序,是一组可用于封闭实现一定功能的程序代码,函数使代码便于重复使用。类别:1、聚合函数聚合函数对一个组值执行计算,并返回单个值。除了COUNT以外,聚合函数都会忽略空置。聚合函数经常与SELECT语句的GROUPBY字句一起使用。常用的聚合函数包括AVC、COUNT、MA
CuterCorley CuterCorley
4年前
Python SQLite常见异常及解决办法
1.sqlite获取某一列数值中的最大值一直返回9问题及解决办法sqlite获取最大值一般使用max函数来获取,但是返回值一直是9。原因是因为该列字段值类型不是数值类型。可以通过cast来改变字段值类型,使用以下语句解决:pythonselectmax(cast(列名asint))from表名2.sqlite3.Opera
Wesley13 Wesley13
3年前
SQL 语句规范
一、基本TSQL语句程序中一般使用的基本sql语句模式InsetInsert into 表名 (列名1,列名2,列名3,...)values  (值1,值2,值3,...)deleteDeletefromwhere列名1值1and列名2值2and列名3值3...
表的纵横表变换
​在我们平时使用数据库时,经常会发现有的表列数过多,为了提高效率,我们经常对要查询的表来纵横表变换。一.行转列1.PIVOT函数PIVOT(任意聚合函数 FOR 列名 IN(类型))    其中,【聚合函数】聚合的字段,是需要转化为列值的字段;【列名】是需要转化为列标识的字段,【类型】即是需要的结果展示,【类型】中可以指定别名; IN中还可以
Wesley13 Wesley13
3年前
Oracle基于布尔的盲注总结
0x01decode 函数布尔盲注decode(字段或字段的运算,值1,值2,值3)这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回3当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多使用方法:比较大小select
Stella981 Stella981
3年前
Shell函数返回值
Shell函数返回值shell函数返回值一般有3种方式:1.return语句shell函数的返回值可以和其他语言的返回值一样,通过return语句返回。比如:!/bin/bashfunctionmytest(){echo"mytestfunction"echo
Wesley13 Wesley13
3年前
MySQL学习——操作表
MySQL学习——操作表摘要:本文主要学习了使用DDL语句操作表的方法。创建表语法1createtable表名表定义选项表选项;表定义选项用来创建定义表的结构,由列名(col\_name)、列的定义(column\_definition)以及可能的空值说明、完
Wesley13 Wesley13
3年前
mysql——GROUP BY和HAVING
GROUPBY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。select子句中的列名必须为分组列或列函数,列函数对于groupby子句定义的每个组返回一个结果。某个员工信息表结构和数据如下:  id  name  dept  salary  edlevel     hiredate   1  张
Wesley13 Wesley13
3年前
Oracle的使用笔记
1. 虚表dual     虚表是Oracle提供的用于操作函数的方式,属于sys用户,共享给所有用户使用。虚表dual是单行单列的表,表中存放一个常量数据X。     虚表的意义:更方便的操作函数或者查询常量。2\.函数      单行函数:表中的一列作为函数的参数,对于每一条记录,函数都有一个返回值。例如:u
小万哥 小万哥
1年前
SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示
SQLMIN()和MAX()函数SQL中的MIN()函数和MAX()函数用于查找所选列的最小值和最大值,分别。以下是它们的用法和示例:MIN()函数MIN()函数返回所选列的最小值。示例:查找Products表中的最低价格:sqlSELECTMIN(Pri
小万哥 小万哥
1年前
Java 构造函数与修饰符详解:初始化对象与控制权限
Java构造函数Java构造函数是一种特殊的类方法,用于在创建对象时初始化对象的属性。它与类名相同,并且没有返回值类型。构造函数的作用:为对象的属性设置初始值执行必要的初始化操作提供创建对象的多种方式构造函数的类型:默认构造函数:无参数的构造函数,如果用户
数字漫游者
数字漫游者
Lv1
更被夕阳江岸上,断肠烟柳一丝丝。
文章
4
粉丝
0
获赞
0