Share via


如何:通过使用公共语言运行时集成创建和运行 SQL Server 用户定义的函数

通过将**“用户定义的函数”**添加到 SQL Server 公共语言运行时 (SQL CLR) 数据库项目,从而创建 SQL 用户定义的函数。 部署成功后,可调用并执行用户定义的函数。

提示

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

创建用户定义的 SQL Server 函数

使用 Visual Studio 建立和部署此函数

  1. 打开一个现有的**“SQL CLR 数据库项目”**,或者创建一个新项目。 有关更多信息,请参见如何:为使用 SQL Server 公共语言运行时集成的数据库对象创建项目

  2. 在**“项目”菜单上选择“添加新项”**。

  3. 在**“添加新项”对话框中,选择“用户定义的函数”**。

  4. 键入新用户定义函数的**“名称”**。

  5. 添加执行用户定义函数时运行的代码。 请参见此过程后面的第一个示例。

  6. 在**“解决方案资源管理器”中,打开“TestScripts”**文件夹,并双击 Test.sql 文件,以打开它进行编辑。 添加执行您的用户定义函数的代码。 请参见此过程后面的第二个示例。

    提示

    您可以将其他脚本指定为默认调试脚本。 有关更多信息,请参见如何:编辑 Test.sql 脚本以运行使用 SQL Server 公共语言运行时集成的对象

  7. 将用户定义函数部署到 SQL Server。 有关更多信息,请参见如何:将 SQL CLR 数据库项目项部署到 SQL Server

    重要说明重要事项

    SQL Server 2005 和 SQL Server 2008 只支持使用 .NET Framework 2.0、3.0 或 3.5 版生成的 SQL Server 项目。 如果您尝试将 SQL Server 项目部署到 SQL Server 2005 或 SQL Server 2008,将出现错误:Deploy error (SQL01268): .NET SqlClient Data Provider: Msg 6218, Level 16, State 3, Line 1 CREATE ASSEMBLY for assembly 'AssemblyName' failed because assembly 'AssemblyName' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database(其中,AssemblyName 是正在部署的程序集的名称)。 有关更多信息,请参见如何:为使用 SQL Server 公共语言运行时集成的数据库对象创建项目

  8. 按 F5 通过在 SQL Server 上执行用户定义的函数来对其进行调试。

说明

下面的代码示例创建用户定义的将价格作为参数的标量函数 addTax,添加销售税并返回价格和销售税的加和。

创建该函数后,将其部署到 SQL Server。 有关更多信息,请参见如何:将 SQL CLR 数据库项目项部署到 SQL Server

代码

Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server

Partial Public Class UserDefinedFunctions

    Public Const SALES_TAX As Double = 0.086

    <SqlFunction()> 
    Public Shared Function addTax(ByVal originalAmount As SqlDouble) As SqlDouble

        Dim taxAmount As SqlDouble = originalAmount * SALES_TAX

        Return originalAmount + taxAmount
    End Function
End Class
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
    public const double SALES_TAX = .086;

    [SqlFunction()]
    public static SqlDouble addTax(SqlDouble originalAmount)
    {
        SqlDouble taxAmount = originalAmount * SALES_TAX;

        return originalAmount + taxAmount;
    }
}

说明

向位于项目的 TestScripts 文件夹中的 Test.sql 文件添加代码以测试用户定义的函数。 例如,若要测试此函数,请使用查询,如“SELECT dbo.addTax(10)”。 您应见到返回的值“10.86”。

代码

SELECT dbo.addTax(10)

请参见

任务

如何:为使用 SQL Server 公共语言运行时集成的数据库对象创建项目

如何:通过使用公共语言运行时集成创建和运行 SQL Server 存储过程

如何:通过使用公共语言运行时集成创建和运行 SQL Server 触发器

如何:通过使用公共语言运行时集成创建和运行 SQL Server 聚合

如何:通过使用公共语言运行时集成创建和运行 SQL Server 用户定义的类型

演练:使用托管代码创建存储过程

如何:调试 SQL CLR 存储过程

参考

SQL CLR 数据库项目和数据库对象的特性

概念

SQL Server CLR 集成简介 (ADO.NET)

使用托管代码创建数据库对象的好处

在托管代码中创建 SQL Server 对象

其他资源

SQL CLR Database Debugging