如何:创建存储过程和用户定义的函数

可以使用服务器资源管理器创建存储过程。 存储过程可以定义复杂的业务规则,控制数据修改,通过安全权限限制访问,提供事务完整性,以及通常执行一些应用程序所需的数据库工作。

通过 Microsoft SQL Server 2000 和更高版本,还可以使用**“服务器资源管理器”**创建用户定义的函数。 用户定义的函数是封装有用的逻辑关系以便在其他查询中使用的例程。 视图限于单个 SELECT 语句,而用户定义的函数可以有多个 SELECT 语句,它提供的逻辑关系比视图可能提供的逻辑关系更强大。

用户定义的函数始终返回一个值。 取决于所返回值的类型,每个用户定义的函数均属于以下三个类别之一:

  • 标量值函数 的用户定义的函数可以返回标量值 (如整数或时间戳。 如果函数返回标量值,则可以在查询中能够使用列名的任何地方使用该函数。

  • 内联函数,如果用户定义的函数包含一个 SELECT 语句,并且该语句是可更新,则该函数所返回的表格格式结果也是可更新的。 此类函数称为内联函数。 当内联函数返回表时,您可以在另一个查询的 FROM 子句中使用该函数。 有关更多信息,请参见如何:使用表以外的对象创建查询

  • 表值函数,如果用户定义的函数包含多个 SELECT 语句或包含不可更新的 SELECT 语句,然后该函数所返回的表格格式结果不可更新。 当表值函数返回表时,您可以在另一个查询的 FROM 子句中使用该函数。

备注

在下面的示例中,dbo 是数据库所有者的缩写,用于限定存储过程和用户定义的函数的名称。dbo 是具有在数据库中执行所有活动的隐含权限的用户。由系统管理员角色中的任何成员创建的任何对象均自动属于 dbo。在下列示例中包含了 dbo 名称限定符。

备注

以下说明中的某些 Visual Studio 用户界面元素在您计算机上的名称或显示位置可能有所不同。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关详细信息,请参阅 Visual Studio 设置

创建新的存储过程

  1. 在服务器资源管理器中,右击**“存储过程”**文件夹或该文件夹中的任何存储过程。

  2. 选择快捷菜单中的**“添加新存储过程”**。

    即会创建带有下列主干 SQL 语句的新存储过程:

    CREATE PROCEDURE dbo.StoredProcedure1
    /*
       (
          @parameter1 datatype = default value,
          @parameter2 datatype OUTPUT
       )
    */
    AS
       /* SET NOCOUNT ON */
       RETURN
    
  3. 可以将第一行中的 StoredProcedure1 替换为新过程的名称。 例如,可以使用 MyProcedure 作为该过程的名称:

    CREATE PROCEDURE dbo.MyProcedure
    

    备注

    存储过程必须具有唯一的名称。如果选择了已分配给另一个存储过程的名称,则出现错误信息,警告您具有该名称的存储过程已经存在。

  4. 在 SQL 中编写剩余的过程文本。

    有关存储过程的更多信息和示例,请参见数据库服务器的文档。 如果您使用的是 Microsoft SQL Server,请参见中的“CREATE PROCEDURE”。SQL Server Books。

创建新的用户定义的函数

  1. 在**“服务器资源管理器”中,右击“函数”**文件夹或该文件夹中的任何函数。

  2. 指向**“新添”,然后在快捷菜单上选择“内联函数”“表值函数”“标量值函数”**。

    备注

    不能将新函数的主干 SQL 语句修改为另一种函数类型的 SQL 语句并保存结果。例如,在开始处理一个内联函数时,不能修改 SQL 语句将该函数变成标量值函数。保存过程将失败。

    即会使用主干 SQL 语句创建新的用户定义的函数。 例如,选择**“标量值函数”**将显示下列主干 SQL 语句:

    CREATE FUNCTION dbo.Function1
       (
       /*
       @parameter1 datatype = default value,
       @parameter2 datatype
       */
       )
    RETURNS /* datatype */
    AS
       BEGIN
          /* sql statement ... */
       RETURN /* value */
       END
    
  3. 可以将第一行中的 Function1 替换为新函数的名称。 例如,可以使用 MyFunction 作为该函数的名称:

    CREATE FUNCTION dbo.MyFunction
    

    备注

    用户定义的函数必须具有唯一的名称。如果选择了已分配给另一个函数的名称,则出现错误信息,警告您具有该名称的函数已经存在。

  4. 在 SQL 中编写剩余的函数文本。

备注

如果快捷菜单未提供所需选项,则可能是因为所用的 Visual Studio 版本不支持此功能。有关更多信息,请参见Visual Database Tools 版本

有关用户定义的函数的更多信息和示例,请参见数据库服务器的文档。 如果您使用的是 Microsoft SQL Server,请参见中的“CREATE FUNCTION”《SQL Server 联机丛书》)。

请参见

概念

查询中的表达式

其他资源

使用存储过程和用户定义的函数