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

除了使用 Transact-SQL 编程语言外,还可以使用 .NET Framework 语言创建数据库对象,以及检索和更新 SQL Server 数据库的数据。 在 Visual Basic 或 Visual C# 项目中,您可以创建存储过程、触发器、聚合、用户定义的函数以及用户定义的类型。 用托管代码编写的数据库对象称为 SQL Server 公共语言运行时对象(或 SQL CLR 对象)。

提示

默认情况下,公共语言运行时 (CLR) 集成功能在 SQL Server 中处于禁用状态。 若要使用 SQL Server 项目项,您必须启用 CLR 集成。 为此,请使用 sp_configure 存储过程的 clr enabled 选项。 有关更多信息,请参见 Microsoft 网站上的 clr enabled 选项主题。

以下列表汇总了使用 .NET Framework 语言(而非 Transact-SQL)的优点:

  • 增强的编程模型   .NET Framework 语言为 SQL Server 开发人员提供了以前没有的构造和功能。

  • 增强的安全性 托管代码在数据库引擎所承载的公共语言运行时环境中运行。 这样就使得 .NET Framework 数据库对象比 SQL Server 早期版本中可用的扩展存储过程更加安全可靠。 当您使用在 Visual Basic 或 Visual C# 中创建的数据库对象时,这些语言的代码访问安全性将与 SQL Server 中基于用户的权限结合在一起。

  • 用户定义的类型和聚合   用户定义的类型和用户定义的聚合是两个托管数据库对象,这两个对象扩展了 SQL Server 的存储功能和查询功能。

  • 公共开发环境   数据库开发被集成到 Microsoft Visual Studio 开发环境中。 开发人员在开发和调试数据库对象和脚本时所使用的工具与他们编写中间层或客户端层的 .NET Framework 组件和服务时所使用的工具相同。

  • 更好的性能   对于某些函数,例如对数据库中的每一行执行数学运算的函数,如果将它们编译为通过 Visual Basic 或 Visual C# 项目生成的程序集,则和使用 Transact-SQL 编写这些函数相比,其性能将会更好,因为使用 Transact-SQL 编写的函数要解释为代码。 例如,函数的性能将得以改善,尤其是那些执行整数运算的函数。 但是,只访问数据的存储过程的性能不会提高。

  • 语言丰富性   Visual Basic 或 Visual C# 提供 Transact-SQL 所没有的功能,例如数组、复杂的异常处理及代码的可重用性。

  • 代码的可重用性   创建和分发托管程序集库会比分发 Transact-SQL 脚本更加容易。

  • 可扩展性使用Visual Basic或Visual C#您可以创建两个不能通过使用创建的数据库对象Transact-SQL: 聚合和用户定义的类型。

  • 利用现有技能 您可以利用并增强您在语言和开发环境(您已经在其中体验过创建数据库对象)方面的技能。

  • 更丰富的开发人员体验   当您使用 SQL Server 项目模板开发数据库对象时,将拥有与项目系统的全面集成。 其中包括针对多台服务器的构建、调试和部署。

  • 稳定性和可靠性   使用 Visual Basic 或 Visual C# 创建的数据库对象比扩展存储过程更加安全、稳定、坚固和可靠,因为这些扩展存储过程可能产生内存泄漏或其他问题,从而降低服务器的性能和可靠性。 当您运行在 Visual Basic 或 Visual C# 中创建的存储过程时,这些存储过程不执行内存管理和线程处理,因此内存管理和线程处理将更加可靠。

存储过程和触发器

存储过程是一个执行数据库操作的编程语句的预编译集合,它们以某个名称保存并作为一个单元来处理。 有关存储过程的更多信息,请参见 SQL Server 文档。

触发器是一种特殊的修改使用一个或多个数据修改操作指定表中的数据时被激活的存储过程: 更新、 插入或删除。 也可以创建数据库级别的触发器,将引发这些触发器以响应数据定义语言 (DDL) 语句。 这些触发器可用于执行数据库中的管理任务,如审核和控制数据库操作。 有关触发器的更多信息,请参见 SQL Server 文档。

存储过程和触发器的开发因 Visual Basic 和 Visual C# 的语言丰富性而得以改善,尤其是在实现强制执行业务规则所需的复杂过程逻辑时更是如此。 此外,.NET Framework 包含很多库。 在这些库当中,有一些库极其重要,您不但可利用它们来对加密进行多方面管,同时还可管理丰富的数学库以及外部对 Web 服务、文件和企业对企业通讯系统的访问。

函数

函数对一个或多个值执行运算以返回标量值或表。 有关 Transact-SQL 编程语言所提供的函数类型的更多信息,请参见 SQL Server 文档。

如同存储过程和触发器一样,函数的开发因 Visual Basic 和 Visual C# 的语言丰富性以及能够访问 .NET Framework 所包含的众多库而得以增强。

聚合

聚合函数用于汇总表中的所有数据。 这些函数对一组值执行计算,并返回单个标量值。 有关 Transact-SQL 编程语言所提供的聚合函数的更多信息,请参见 SQL Server 文档。

若要补充这些聚合函数,您可以定义执行更复杂算术函数的新聚合。 例如,您可以对很多行中的数据执行计算,然后返回一个值或创建串连字符串。

用户定义的类型

类型指定数据的性质。 有关与 SQL Server 一起提供的系统数据类型集的信息,请参见 SQL Server 文档。

使用 Visual Basic 和 Visual C#,您可以定义新类型,以便不再局限于与 SQL Server 一起提供的预定义类型。 您可以创建简单的类型(如邮政编码)或更复杂的类型(用于分析信用卡交易所返回的信息)。 此外,当使用用户定义的类型时,在 SQL 客户端和 SQL Server 上都可对数据进行解释和操作;通过使用 ADO.NET,您可以下载包含来自 SQL Server 的类型定义的程序集,并在 SQL 客户端上用其检查数据。

请参见

任务

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

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

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

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

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

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

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

如何:调试 SQL CLR 存储过程

参考

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

概念

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

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