快速业务通道

SQL Server自带的用户自定义函数

作者 佚名技术 来源 数据库编程 浏览 发布时间 2012-03-22
 使用自定义函数

打开Microsoft SQL Server Management Studio,展开任意一个数据库节点下的【可编程性】节点,如图4.27所示。读者会发现该节点下,除【函数】节点还没有介绍以外,其他【可编程性】功能已全部介绍过了。本节着重对SQL Server提供的函数功能进行介绍。


图4.27 【函数】节点


用户自定义函数(User Defined Functions,UDFs)是SQL Server提供的另一强大功能。借助UDFs,数据库开发人员可以实现复杂的运算操作,例如实现功能更加强大的聚合运算。UDFs返回的结果可以是一个单一数值(即标量值函数),也可以是一个数据集(即表值函数)。实际上,前面介绍的存储过程和触发器概念都可以被归为用户自定义函数。

SQL Server从其2000版本开始就已向数据库开发人员提供了用户自定义函数功能。开发人员可以使用Transact-SQL根据需要开发自己所需的自定义函数。而进入SQL Server 2005后,与存储过程、触发器以及自定义类型一样,自定义函数也可以由CLR实现,即通过高级语言实现自定义函数。由此可见,CLR功能极大地扩展了SQL Server数据的编程能力。

虽然用户自定义函数与存储过程和触发器有很多共同点,但是与它们相比,自定义函数具有某些更加灵活的特点。例如,从上面的示例可以看出,虽然一个存储过程可以返回一组数据集,但是存储过程却不能作为其他查询表达式的一部分。简单地说,存储过程不能出现在查询语句中的FROM之后。而下面介绍的用户自定义函数则可以出现在一个查询语句的FROM之后。如果自定义函数返回一组数据集,那么仍然可以在该数据集的基础上进一步执行查询操作。除此之外,开发人员还可以设计一个只返回特定字段的数据集,这一功能类似于一个视图,但与一个简单的视图不同,采用自定义函数实现的视图,可以根据需要接受相应的参数。

4.4.1  SQL Server自带的用户自定义函数

SQL Server 2005为数据库开发人员提供了一些自带的用户自定义函数。其中,一些用户自定义函数由SQL Server数据库服务器自身以及SQL Server Management Studio等数据库管理工具,数据库服务器以及客户端所使用。下面简要介绍一些常见的用户自定义函数。与大部分存储过程不一样,用户无法修改这些用户自定义函数。很多情况下,用户甚至无法使用存储过程sp_help或sp_helptext来查看这些函数的Transact-SQL脚本代码。SQL Server为用户自定义函数提供了专门的系统数据表syscomments来保存这些用户自定义函数的定义信息。

SQL Server提供的内置系统函数的前缀分为两类,即dm_和fn_。其中fn_为常见的函数(function)缩写,而前缀dm_则是SQL Server 2005新添加的功能——动态管理(Dynamic Management)功能的缩写。SQL Server 2005提供的动态管理功能包括两类,即动态管理视图(Dynamic Management View,DMV)和动态管理函数(Dynamic Management Function,DMV)。

【示例6】dm_exec_cursors函数应用。

例如,dm_exec_cursors就是DMF中的一个。该动态管理函数用于返回当前SQL Server数据库中正处于执行状态中的游标信息,该函数的应用过程如下。

(1) 在【查询编辑器】中输入以下SQL脚本代码:

USE Northwind
GO
SELECT * FROM sys.dm_exec_cursors(0)
GO

DECLARE cEmploy CURSOR STATIC
FOR
SELECT EmployeeID,FirstName
FROM Employees
WHERE TitleOfCourtesy = ''Mr.''
ORDER BY EmployeeID
GO

SELECT * FROM sys.dm_exec_cursors(0)
GO

OPEN cEmploy
GO

SELECT * FROM sys.dm_exec_cursors(0)
GO

CLOSE cEmploy
GO

SELECT * FROM sys.dm_exec_cursors(0)
GO

DEALLOCATE cEmploy
GO

SELECT * FROM sys.dm_exec_cursors(0)
GO



(2) 单击【执行】按钮,执行后的结果如图4.28所示。


图4.28 运行结果

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号