CLR 用户定义的类型

适用于:SQL Server

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

注意

在 SQL Server 中,执行 CLR 代码的功能默认设置为 OFF。 可以使用 sp_configure 系统存储过程启用 CLR。

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

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

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

  • 地理空间应用程序

  • 编码或加密数据

在 SQL Server 中开发 UDT 的过程包括以下步骤:

  1. 编码和生成定义 UDT 的程序集。 使用生成可验证代码的 .NET Framework 公共语言运行时 (CLR) 所支持的任何语言都可以定义 UDT, 这包括 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 (9.x) 之前,不支持从.NET Framework程序集创建的 UDT。 但是,仍可以使用sp_addtype SQL Server别名数据类型。 CREATE TYPE 语法可用于创建本机SQL Server用户定义的数据类型和 UDT。

  4. 使用 UDT 创建表、变量或参数从 SQL Server 2005 (9.x) 开始,用户定义的类型可用作表的列定义、Transact-SQL 批处理中的变量或 Transact-SQL 函数或存储过程的参数。

本节内容

创建User-Defined类型
描述如何创建 UDT。

在 SQL Server 中注册用户定义类型
介绍如何在 SQL Server 中注册和管理 UDT。

使用 SQL Server 中的用户定义类型
描述如何使用 UDT 创建查询。

在 ADO.NET 中访问用户定义类型
介绍如何在 ADO.NET 中使用用于SQL Server的 .NET Framework 数据提供程序使用 UDT。