zoukankan      html  css  js  c++  java
  • SQL 用户定义函数

    编程语言中的函数是用于封装经常执行的逻辑的子例程。任何代码若必须执行函数所包含的逻辑,都可以调用该函数,而不必重复所有的函数逻辑。

    Microsoft® SQL Server™ 2000 支持两种函数类型:

    • 内置函数

      按 Transact-SQL 参考中定义的方式运行且不能修改。只有使用 Transact-SQL 参考中所定义语法的 Transact-SQL 语句才能引用这类函数。有关这些内置函数的更多信息,请参见使用函数

    • 用户定义函数

      使您得以用 CREATE FUNCTION 语句定义自己的 Transact-SQL 函数。有关这些内置函数的更多信息,请参见用户定义函数

    用户定义函数接受零个或更多的输入参数,并返回单值。一些用户定义函数返回单个的标量数据值,如 intchardecimal 值。

    例如,下面的语句创建一个返回 decimal 的简单函数:

    CREATE FUNCTION CubicVolume
    -- Input dimensions in centimeters.
       (@CubeLength decimal(4,1), @CubeWidth decimal(4,1),
        @CubeHeight decimal(4,1) )
    RETURNS decimal(12,3) -- Cubic Centimeters.
    AS
    BEGIN
       RETURN ( @CubeLength * @CubeWidth * @CubeHeight )
    END
    

    然后可以在允许整型表达式的任何地方(如表的计算列中)使用该函数:

    CREATE TABLE Bricks
       (
        BrickPartNmbr   int PRIMARY KEY,
        BrickColor      nchar(20),
        BrickHeight     decimal(4,1),
        BrickLength     decimal(4,1),
        BrickWidth      decimal(4,1),
        BrickVolume AS
                  (
                   dbo.CubicVolume(BrickHeight,
                             BrickLength, BrickWidth)
                  )
       )
    

    SQL Server 2000 还支持返回 table 数据类型的用户定义函数:

    • 该函数可声明内部 table 变量,将行插入该变量,然后将该变量作为返回值返回。

    • 一类称为内嵌函数的用户定义函数,将 SELECT 语句的结果集作为变量类型 table 返回。

    这些函数可用在能指定表表达式的地方。有关 table 数据类型的更多信息,请参见使用特殊数据

    返回 table 的用户定义函数可以是替代视图的强大方式。返回 table 的用户定义函数可用在 Transact-SQL 查询中允许表或视图表达式的地方。视图受限于单个 SELECT 语句,而用户定义函数可包含附加的语句,使函数所包含的逻辑比视图可能具有的逻辑更强大。

    返回 table 的用户定义函数还可替换返回单个结果集的存储过程。由用户定义函数返回的 table 可在 Transact-SQL 语句的 FROM 子句中引用,而返回结果集的存储过程则不能。例如,fn_EmployeesInDept 是返回 table 的用户定义函数,可由 SELECT 语句唤醒调用:

    SELECT *
    FROM tb_Employees AS E,
         dbo.fn_EmployeesInDept('shipping') AS EID
    WHERE E.EmployeeID = EID.EmployeeID
    

    下面的语句在 Northwind 数据库中创建将要返回 table 的函数:

    CREATE FUNCTION LargeOrderShippers ( @FreightParm money )
    RETURNS @OrderShipperTab TABLE
       (
        ShipperID     int,
        ShipperName   nvarchar(80),
        OrderID       int,
        ShippedDate   datetime,
        Freight       money
       )
    AS
    BEGIN
       INSERT @OrderShipperTab
            SELECT S.ShipperID, S.CompanyName,
                   O.OrderID, O.ShippedDate, O.Freight
            FROM Shippers AS S
                 INNER JOIN Orders AS O ON (S.ShipperID = O.ShipVia)
            WHERE O.Freight > @FreightParm
       RETURN
    END
    

    在这个函数中,返回的本地变量名是 @OrderShipperTab。函数中的语句在 @OrderShipperTab 变量中插入行,以生成由该函数返回的 table 结果。外部语句唤醒调用该函数以引用由该函数返回的 table

    SELECT *
    FROM LargeOrderShippers( $500 )
    

    ©1988-2000 Microsoft Corporation。保留所有权利。

  • 相关阅读:
    App分享微信小程序
    PHP-FFMpeg 操作视频/音频文件 (转)
    用户画像
    phpcms中的RBAC权限系统
    PHPExcel生成excel
    OPNET中节点模型中包流的索引号的含义
    删除opnet之前保存或打开的目录后每次打开总会提示warning
    opnet 的学习方法有感
    win10:两款轻量级美化软件使用技巧(StartlsBack++与RocketDock)
    任务栏透明
  • 原文地址:https://www.cnblogs.com/wangpei/p/1501223.html
Copyright © 2011-2022 走看看