频道直达 - 学院 - 下载 - 交易 - 特效 - 字库 - 手册 -排名-工具- 繁體
网页教学网站开发 设为首页
加入收藏
联系我们
建站搜索: 常用广告代码   用户注册 | 用户登陆
您当前的位置:中国建站之家 -> 网站开发设计技术教程 -> 网站数据库开发教程 -> 如何在SQL Server中构建并利用UDF表格

如何在SQL Server中构建并利用UDF表格

作者:未知  来源:本站整理  发布时间:2007-6-30 7:34:03  发布人:圈圈

减小字体 增大字体

在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表格使你能够达到一个存储过程不可能完成的高细粒性和重复利用性水平


将本文收藏到QQ书签与更多好友分享
[打 印]
[] [返回上一页] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 要10G免费网络硬盘的请进..
· 通过google 赶快来赚美金..
· 注册码大全十
· 头像-qq头像(qq新头像)4..
· 让你轻松架设FTP服务器1..
· 注册码大全三
· 梦幻背景图片7
· 卡通动物图片6
· 网页制作素材-按钮素材2..
· 让你轻松架设FTP服务器5..
· 风景图片8
· 注册码大全九
· 让你轻松架设FTP服务器2..
关注此文读者还看过
· 使用AJAX技术的十大理由..
· 在ASP.NET中从SQL Serve..
· Flash MX2004入门与进阶..
· Flash制作书法动画2
· Photoshop打造照片仙境效..
· 杨伟庆:模式抄袭对互联..
· 分布式的Qmail邮件系统(..
· 编写ASP时用JScript好还..
· AS的基本代码解释
· 判断函数一览
· 如何编程实现修改数据库..
· ip00.com/2G免费邮箱
· Photoshop色彩调整:特殊..
· asp+语法介绍(一)
· SQL中获得EXEC后面的sql..
· 关于0x80040e14错误
相关文章
· 如何在SQL数据库中得到重复..
· 如何在sql server系统表中获..
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
粤ICP备05092265号