微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLServer之修改标量值函数

修改标量值函数注意事项

sql 或 CLR 函数,但不更改权限,也不影响任何相关的函数、存储过程或触发器。

函数更改为表值函数。反之亦然。

sql 函数更改为 CLR 函数。反之亦然。

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

数据库管理工具修改标量值函数语法和T-sql脚本修改标量值函数语法相同。

broker 语句不能包含在 sql 用户定义函数的定义中:

使用T-sql脚本修改标量值函数

语法:

数据库引用

数据库名;

修改标量值函数

arameter_name  [as] [type_schema_name.] parameter_data_type [ = default ] [ readonly],..n)

语法解析:

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

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

arameter_name用户定义函数中的参数。 可声明一个或多个参数。一个函数最多可以有 2,100 个参数。 执行函数时,如果未定义参数认值,则用户必须提供每个已声明参数的值。一个字符来指定参数名称。 参数名称必须符合标识符规则。 参数是对应于函数的局部参数;其他函数中可使用相同的参数名称数据库对象的名称

arameter_data_typesql 函数,允许使用除 timestamp 数据类型之外的所有数据类型(包括 CLR 用户定义类型和用户定义表类型)。 函数,允许使用除 text、ntext、image、用户定义表类型和 timestamp 数据类型之外的所有数据类型(包括 CLR 用户定义类型)。 在 Transact-sql 函数或 CLR 函数中,数据库引擎会按以下顺序查找 scalar_parameter_data_type:sql Server 系统数据类型名称的架构。数据库中当前用户认架构。数据库中的 dbo 架构。

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

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

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

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

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

函数的 OnNULLCall 属性。 如果未指定,则认为 CALLED ON NULL INPUT。 这意味着即使传递的参数为 NULL,也将执行函数体。函数中指定了 RETURNS NULL ON NULL INPUT,它指示当 sql Server 接收到的任何一个参数为 NULL 时,它可以返回 NULL,而无需实际调用函数体。 如果 中指定的 CLR 函数方法已具有指示 RETURNS NULL ON NULL INPUT 的自定义属性属性。 不能为 CLR 表值函数指定 OnNULLCall 属性

用户定义函数,EXECUTE AS 是必需的。用户是创建或更改模块的用户。 创建或更改模块的用户的实际用户 ID 存储在 sys.sql_modules 或 sys.service_queues 目录视图的 execute_as_principal_id 列中。登录触发器指定 OWNER。用户的上下文中执行。 将根据 user_name 来验证对模块内任意对象的权限。 不能为具有服务器作用域的 DDL 触发器或登录触发器指定 user_name。 请改用 login_name。数据库中,并且必须是单一实例帐户。 user_name 不能为组、角色、证书、密钥或内置帐户,如 NT AUTHORITY\LocalService、NT AUTHORITY\NetworkService 或 NT AUTHORITY\LocalSystem用户 ID 存储在元数据中,可以在 sys.sql_modules 或 sys.assembly_modules 目录视图的 execute_as_principal_id 列查看。sql Server 登录的上下文中执行。 将根据 login_name 来验证对模块内任意对象的权限。 只能为具有服务器作用域的 DDL 触发器或登录触发器指定 login_name。stem。

函数值的 Transact-sql 语句,这些语句在一起使用不会产生负面影响(例如修改表)。 function_body 仅用于标量函数和多语句表值函数函数中,function_body 是一系列 Transact-sql 语句,这些语句一起使用可计算出标量值。函数中,function_body 是一系列 Transact-sql 语句,这些语句将填充 TABLE 返回变量。

函数返回的标量值。

语法调用

函数名称](参数值,...n);

示例:

数据库引用

修改数据库noreferencepro1](@num1 int,@num2 int)

示例结果:依次显示修改结果和调用结果。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐