网站地图 | 联系我们 | 咨询热线:13999201770
您现在的位置: 新疆二域设计网络公司 >> 网页设计学院 >> 数据库 >> Mssql数据库 >> 正文

在SQL Server 2000和2005中,UDF(用户定义函数)表格是我最喜欢的特性之一。如果你还没有用过它们,可以试一下,它会带给你很多惊喜的。

UDF表格和返回一个记录集的存储过程类似。你可以通过如下简单的示例代码,得到一个两列无行或数行的记录集。

CREATE PROCEDURE simple_ap
( @cityID integer )
AS
SELECT CustomerID, CompanyName
FROM Customers
WHERE Customers.CityID = @cityID

要重复利用这样一个存储过程的结果没有简单的方法。例如,你不能将记录集应用于其他的程序,或者将其添加到一个表格、视图或另一个记录集中。如果可以做到这一点的话,那么你重复利用代码的机会就会大大增加,并且,你还可以据此自己设计代码。

进入UDF表格,这种构造使你能够像处理一个真正的表格或视图那样对待结果集——你可以将它加入到其他的对象中,对它添加一个WHERE字句,甚至更多。

以下的代码中包括了在SQL Server 2000中创建UDF表格的句法:

CREATE FUNCTION [owner].[function_name]
(
@parm1 <datatpe> = <default>
)
RETURNS TABLE
AS
RETURN
(
SELECT <column1, column2, ...>
FROM <table, view, etc.>
WHERE <some condition applies>      -- optional clauses
)

要将以上的存储过程转换成为一个UDF表格,只需用适当的块替换UDF句法中的位置标记就行了,就像下面这样:

CREATE FUNCTION [dbo].[Customers_By_City_Select]    
-- denotes table UDF
(
@city nvarchar(15)
)
RETURNS TABLE
AS
RETURN
(
SELECT CustomerID, CompanyName
FROM dbo.Customers
WHERE Customers.City = @city
)

结果集是相同的,但是它却有一些很好的新优点。首先,利用过程的话,调用方法如下:EXEC simple_ap 12345 而对UDF的调用是这样的:

SELECT * FROM Customers_By_City_Select ('Berlin')

我们注意到,如果利用UDF的话,我们可以向调用添加DISTINCT命令,用它来减少该示例代码中的结果集:

ALFKIAlfredsFutterkiste

ANATRAna Trujillo Emparedados y helados

ANTONAntonio Moreno Taquería

AROUTAround the Horn

这不仅证明一个表格函数就是一个真实的表格,而且也表明允许这种灵活性的过程将肯定会更加复杂。

乐趣才刚刚开始。我们可以选中函数所返回的列中的任一子集:

SELECT CustomerID FROM Customers_By_City_Select ('Berlin')

表格函数最好的一个方面就是它们的表格性:在将其添加到表格、查看和其他表格函数中时,要引用UDF,把它当作表格来处理:

SELECT Customers_By_City_Select.CustomerID, OrderID

FROM Customers_By_City_Select ('Berlin')

INNER JOIN Orders ON Orders.CustomerID = Customers_By_City_Select.CustomerID

返回以下结果集:

ALFKI10643

ALFKI10692

ALFKI10702

ALFKI10835

ALFKI10952

ALFKI11011

这种能力使得我喜欢称之为的原子查询变得更简易。原子查询从表格(或视图)中返回结果。通过结合几个原子查询,你可以创建一个(包括几个原子查询的)分子查询。UDF表格使你能够达到一个存储过程不可能完成的高细粒性和重复利用性水平。

作者:佚名 | 文章来源:本站原创 | 更新时间:2007-6-30 21:24:22

  • 上一篇文章:

  • 下一篇文章:
  • 相关文章:
    MySQL ODBC进行MySQL和SQL Server转换…
    HTML-加速、再加速
    XML专区-XML 中的常见问题 (三)…
    XML专区-XML在B/S架构开发中的应用
    优化SQL Server服务器内存配置的策略…
    SQL SERVER存在拒绝服务问题…
    用SQL Server为Web浏览器提供图片3…
    调整重心-从IIS到SQL Server数据库安全…

    色彩理念
    网页制作
    美工图形
    网络编程
    数 据 库
    网站运营
    ::最近更新::
    ·在SQL中用 SP_KEYS确定一个…
    ·卸载SQL Remote对象以及稳…
    ·层次型和关系型、基因组序…
    ·向外扩展数据库系统的两个…
    ·MSSQL锁定的模式与锁定的管…
    ·SQL Server 2005教程:如何…
    ·SQL Server数据库两种备份…
    ·使用SQL Server代理设置SQ…
    ·在SQL Server 2000和SQL S…
    ·SQL SERVER 2005中同步复制…
    ·SQL Server上的数据加密与…
    ·常用SQL语句整理
    ·SQL Server性能分析参数…
    ·优化SQL Server服务器内存…
    ·使用命名管道访问SQL Serv…
    ::推荐阅读::
    ·SQL Server性能分析参数…
    ·优化SQL Server服务器内存…
    ·用SQL Server为Web浏览器提…
    ·SQL Server 2000的安全配置…
    ·无组件上传图片至SQLSERVE…

    关于我们 | 网站建设 | 服务帮助 | 联系我们 | 网页设计学院 | 实用工具 | 友情链接 | 新疆专题
    版权所有 © 2007 新疆二域设计网络公司 www.xjcncn.com All Rights Reserved
    网站建设总机:0991-4811639 传真:0991-4842803 ;咨询热线:13999201770. E-mail:xjcncn@gmail.com
    MSN :xjcncn@hotmail.com ; QQ:359312 ;地址:新疆乌鲁木齐市友好E时代公寓B座708 邮编:830000