修改表值函数注意事项

更改先前通过执行 CREATE FUNCTION 语句创建的现有 Transact-SQL 或 CLR 函数,但不更改权限,也不影响任何相关的函数、存储过程或触发器。

不能用 ALTER FUNCTION 将表值函数更改为标量值函数,反之亦然。

不能用 ALTER FUNCTION 将内联函数更改为多语句函数,反之亦然。

不能使用 ALTER FUNCTION 将 Transact-SQL 函数更改为 CLR 函数,反之亦然。

需要对函数或架构具有 ALTER 权限。 如果函数指定用户定义类型,则需要对该类型具有 EXECUTE 权限。

使用SSMS数据库管理工具修改表值函数和使用T-SQL脚本修改表值函数语法相同。

下列 Service Broker 语句不能包含在 Transact-SQL 用户定义函数的定义中:

  • BEGIN DIALOG CONVERSATION
  • END CONVERSATION
  • GET CONVERSATION GROUP
  • MOVE CONVERSATION
  • RECEIVE
  • SEND

使用T-SQL脚本修改表值函数

语法:

语法一:修改表值函数。

--声明数据库引用

use 数据库名;

go

--修改表值函数

alter function [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

--创建表值函数

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 字段名,...n from 架构名.函数名(参数值);

示例:

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

--修改内联表值函数
alter function dbo.innertablefun(@ids int=null)
returns @table1 table
(
id int not null,
name nvarchar(100),
sex nvarchar(100),
test3id int,
test3name nvarchar(100)
)
with encryption,schemabinding
as
begin
with tmptable as (
select a.id,a.name,a.sex,b.id as test3id,b.name as test3name
from dbo.test1 as a
inner join dbo.test3 as b on a.classid=b.id
where a.id=@ids
)
insert into @table1(id,name,sex,test3id,test3name)
select id,name,sex,test3id,test3name from tmptable
return;
end;
go

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

SQLServer之修改表值函数的更多相关文章

  1. SQLServer之创建表值函数

    表值函数创建注意事项 用户定义表值函数返回 table 数据类型. 对于内联表值函数,没有函数主体,表是单个 SELECT 语句的结果集. 表值函数主要用于数据计算出来返回结果集. 使用SSMS数据库 ...

  2. sqlserver中的表值函数和标量值函数

    顾名思义:表值函数返回的是表,而标量值函数可以返回基类型 一.表值函数 用户定义表值函数返回 table 数据类型.对于内联表值函数,没有函数主体:表是单个 SELECT 语句的结果集. 以下示例创建 ...

  3. SqlServer使用表值函数汇总

    先谈谈需求,我们先创建一张表,脚本如下: create table Cost ( Id ,) primary key,--编号 CostTime date,--时间 Num int--销售额 ); ' ...

  4. sqlserver 表值函数与标量值函数

    除了在我们常用的程序开发中要用到函数外,在sql语句中也常用到函数,不论哪种,思想都没有变,都是为了封装,可复用. 创建的方法和整体结构都大体相同,都少不了函数名,函数的形参,返回值等这些. 一.表值 ...

  5. sqlserver 表值函数

    一.单语句表值函数 ALTER function [dbo].[uf_get_jxc_da_sum](@dt char(8),@dt2 char(8)) RETURNS table as return ...

  6. sqlserver自定义函数(标量值函数,表值函数)

    用户自定义的函数有两类:表值函数.标量值函数. 表值函数:返回值是数据表的函数 调用方式 select  b.*  from tableA a accross apply Fun_BiaoZhiFun ...

  7. Sqlserver表值函数来获取逗号分隔的ID

    其功能为: 将字符串如'1,2,3,4,5,6' 拼接成SQL里面的id 1:使用: select * from Student where id IN( SELECT * FROM dbo.F_SP ...

  8. 【转载】 Sqlserver中查看自定义函数被哪些对象引用

    Sqlserver数据库中支持自定义函数,包含表值函数和标量值函数,表值函数一般返回多个数据行即数据集,而标量值函数一般返回一个值,在数据库的存储过程中可调用自定义函数,也可在该自定义函数中调用另一个 ...

  9. UDF_表值函数与标量函数的区别_分割字符串成单个的字符并返回表(插入到表中)

    UDF_区别_分割字符串成单个的字符并返回表(插入到表中) /* SQL表值函数和标量值函数的区别 实验环境:SQL Server 2014,参考maomao365有改编 在sqlserver中存储过 ...

随机推荐

  1. Python—day13 迭代器、迭代器对象、for循环对象、生成器、枚举对象

    一.迭代器 1.迭代器概念: 器:包含了多个值的容器 迭代:循环反馈(一次从容器在取出一个值) 迭代器:从装有多个值的容器在一次取出一个值 ls=[3,5,7,1,9] 遍历:被遍历的对象必须是有序容 ...

  2. Java连接数据库之SQLServer

    工具: eclipse Microsoft SQL Server SQL Server连接驱动:mssql-jdbc-6.4.0.jre8.jar SQL script代码 CREATE DATABA ...

  3. spark调用hdfsAPI

    spark 调用 hdfs API 查询文件名字.删除文件: 获取HDFS上面某个路径下的所有文件的名字 import org.apache.hadoop.conf.Configuration imp ...

  4. 跳槽 & 思维导图

    个人博客原文: 跳槽 & 思维导图 今年的冬天有点"冷".给大家来点实在的东西. 不知道大家在跳槽的时候是怎么做的?直接投简历面试?还是准备了一段时间,复习一波知识点后再投 ...

  5. MetaEditor中MQL使用方法

    MT4程序--帮助--MQL5文档,转到网页,切换到中文,点击旁边搜索图标. MetaEditor编辑器,点击相应关键字,按F1键,即可启动MT4对应的MQL4的对应关键字用法帮助.但是英文. 时间序 ...

  6. .net文件上传默认限制了大小4M

    如果需要上传比较大的文件(文件大小大于4M).则需要在webconfig里面<system.web>修改httpRuntime节点: <httpRuntime targetFrame ...

  7. 关于ML.NET v1.0 RC的发布说明

    ML.NET是面向.NET开发人员的开源和跨平台机器学习框架(Windows,Linux,macOS).使用ML.NET,开发人员可以利用他们现有的工具和技能组,通过为情感分析,推荐,图像分类等常见场 ...

  8. .NET Core WebApi中实现多态数据绑定

    什么是多态数据绑定? 我们都知道在ASP.NET Core WebApi中数据绑定机制(Data Binding)负责绑定请求参数, 通常情况下大部分的数据绑定都能在默认的数据绑定器(Binder)中 ...

  9. APK安装成功后点击"打开",按Home键,在桌面点击图标后应用重启

    转载:http://blog.csdn.net/kepoon/article/details/7468688 问题: 安装系统SD卡里面的apk或者原有的程序更新版本的时候,会遇到升级安装成功之后的一 ...

  10. leetcode — remove-duplicates-from-sorted-array-ii

    /** * Source : https://oj.leetcode.com/problems/remove-duplicates-from-sorted-array-ii/ * * * Follow ...