CLR 用户定义类型

SQL Server 用于创建基于以 .NET Framework 公共语言运行库 (CLR) 创建的程序集而编写的数据库对象。数据库对象包括触发器、存储过程、函数、聚合函数和类型,它们可以利用 CLR 提供的丰富的编程模型。

注意注意

默认情况下,在 SQL Server 中关闭了执行 CLR 代码的功能。通过使用 sp_configure 系统存储过程可以启用 CLR。

从 SQL Server 2005 开始,可以使用用户定义类型 (UDT) 来扩展服务器的标量类型系统,从而启用在 SQL Server 数据库中存储 CLR 对象的功能。UDT 可以包含多个元素,还可以有行为,这使它们与由单个 SQL Server 系统数据类型组成的传统别名数据类型区分开来。

因为 UDT 作为整体供系统访问,所以其对复杂数据类型的使用可能会对性能有负面影响。通常,使用传统的行和表可以对复杂数据进行最佳建模。SQL Server 中的 UDT 非常适合以下各项:

  • 日期、时间、货币和扩展数字类型

  • 地理空间应用程序

  • 编码或加密数据

在 SQL Server 中开发 UDT 的过程由以下步骤组成:

  1. 编码和生成定义 UDT 的程序集。   用于定义 UDT 的语言可以是受 .NET Framework 公共语言运行库 (CLR) 支持并且能够产生可验证代码的任何语言。这包括 Visual C# 和 Visual Basic .NET。数据作为 .NET Framework 类或结构的字段和属性公开,其行为由类或结构的方法定义。

  2. 注册程序集。   可以通过在数据库项目中使用 Visual Studio 用户界面,或通过使用 Transact-SQL CREATE ASSEMBLY 语句(该语句将包含类或结构的程序集复制到数据库中),来部署 UDT。

  3. 在 SQL Server 中创建 UDT。   一旦程序集加载到宿主数据库中,则使用 Transact-SQL CREATE TYPE 语句创建 UDT,并将该类或结构的成员作为此 UDT 的成员公开。UDT 仅在单个数据库的上下文中存在,一旦注册,则不依赖于从其创建它们的外部文件。

    注意注意

    在 SQL Server 2005 之前,不支持从 .NET Framework 程序集创建的 UDT。但是,仍然可以通过使用 sp_addtype,在 SQL Server 2005 和 SQL Server 2008 中使用 SQL Server 别名数据类型。本机 SQL Server 用户定义数据类型和 UDT 都可以用 CREATE TYPE 语法创建。

  4. **使用 UDT 创建表、变量或参数   ** 从 SQL Server 2005 开始,用户定义类型可以用作表的列定义、用作 Transact-SQL 批中的变量或用作 Transact-SQL 函数或存储过程的参数。有关其他信息,请参阅使用 CLR 用户定义类型

本节内容