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

在定义数据库对象时,通常使用 Transact-SQL 编程语言。 不过,您还可以使用 .NET Framework 语言来定义数据库对象(例如存储过程和触发器),以及检索和更新 SQL Server 数据库的数据。 这些对象通常称为 SQL Server 公共语言运行时对象(或 SQL CLR 对象)。

若要创建数据库对象,可以创建一个 SQL Server 项目,向该项目添加所需的项,然后为这些项添加代码。 接着,将该项目生成为程序集,并将其部署到 SQL Server。

提示

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

生成、部署和调试

当生成项目时,该项目被编译为可部署到数据库的程序集,数据库在项目中引用和调试。

提示

除了分三个独立的步骤进行生成、部署和调试外,也可以使用“启动”命令 (F5) 或“开始执行(不调试)”命令 (Ctrl+F5) 生成程序集,再将其部署到数据库并调试数据库对象。 如果要使用 F5 或 Ctrl+F5,则必须将 SQL CLR 数据库项目设置为启动项目。 有关更多信息,请参见如何:设置启动项目

可以选择将 Transact-SQL 语句添加到 PreDeployScript.sql 和 PostDeployScript.sql。 如果需要在部署 SQL CLR 数据库项目之前或之后对数据库执行操作,您可能会选择这样做。

必须先将 Transact-SQL 代码添加到 Test.sql 脚本,然后才能调试数据库对象,或者,您可以将相同的 Transact-SQL 代码添加到 Transact-SQL 编辑器的实例,该代码连接到您向其部署了项目的数据库。 脚本在数据库中执行启动和测试数据库对象时必需的操作,因此对于调试非常重要。 如果 SQL CLR 数据库项目包含多个数据库对象,则脚本应包括操纵您希望调试的每个数据库对象所需的 Transact-SQL 代码。

此调试脚本的要求与创建和运行独立可执行程序的项目(例如 Windows 窗体项目)不同。 这是因为数据库对象只有在响应数据库中的操作或调用时才会运行。 例如,当在表中插入新行时,可能会激活触发器。 因此,脚本必须将一个新行插入到表中以激活触发器。 该触发器的结果显示在 Visual Studio 的**“输出窗口”**中,可以通过它确定触发器是否工作正常。

重要说明重要事项

必须具有适当权限才能部署或调试 SQL CLR 程序集。 有关更多信息,请参见执行 Visual Studio 的数据库功能所需的权限

在有关每个数据库对象类型的主题中可找到该类型的代码示例。

调试数据库对象

当调试数据库对象时,程序集被生成、部署(到数据库)和调试。 当对以前生成和部署的数据库对象进行调试时,只有在项目自上次生成后发生了更改时才会重新生成程序集。 通常从数据库中删除该程序集并再复制一次。 有关更多信息,请参见调试使用托管代码的数据库对象(SQL CLR 调试)

启用远程调试

  1. 在**“解决方案资源管理器”**中,右击要为其启用远程调试的 SQL CLR 项目,然后单击“属性”。

  2. 单击**“部署”**选项卡。

  3. 选择**“部署代码”**。

  4. 在**“文件”菜单上,单击“保存选定项”**。

调试数据库对象

  1. 在**“解决方案资源管理器”**中,单击解决方案。

  2. 在**“调试”菜单上,单击“启动”**。

  3. 在**“输出”窗口的“显示以下输出”列表中,选择“数据库输出”**以查看结果。

常规任务

常规任务

支持内容

了解更多有关 SQL CLR 数据库项目: 阅读有关发展的优势。.NET 框架数据库对象的SQL Server使用托管的代码。托管的代码有几个优点相比Transact-SQL。

获取动手练习: 按照本演练熟悉如何创建、 部署和测试项目,通过使用托管的代码中定义的存储的过程。

创建 SQL CLR 数据库项目: 创建一个项目,在Visual Basic或Visual C#,将包含您要定义的数据库对象的定义。

将项目添加到 SQL CLR 数据库项目中: 当您首次创建SQL Server项目,它只包含引用和程序集信息。 若要创建数据库对象,您必须为项目添加项,然后为项添加代码。 可以添加存储过程、聚合、触发器、用户定义的函数以及用户定义的类型。 必须将特性应用于每个 SQL Server 项目及其包含的每个对象。

可以在项目中定义多个对象。 如果对象需要独立更新,或者并非所有对象都用在您将部署所生成程序集的每个数据库中,则您可能会选择使用多个项目。

将程序集部署到 SQL Server,并对其进行测试: 在创建项目、 添加项目,并为这些项添加代码后,您必须部署生成的程序集,以SQL Server之前,您可以使用已定义的对象。 如果一个 SQL Server 项目包含对另一个 SQL Server 项目中一个或多个对象的引用,则不能对第一个项目使用“部署”命令来部署第二个(引用的)项目。 部署程序集之后,可通过运行测试脚本来执行某些简单的测试。

部署的调试。一、 网络架构的数据库对象。 如果您的数据库对象不按预期方式工作,您可以调试该对象来识别并更正任何代码缺陷。

参考

  • System.Data
    描述 System.Data 命名空间并提供相关类的表。

  • System.Data.Sql
    描述 System.Data.Sql 命名空间并提供相关类的表。

  • System.Data.SqlTypes
    System.Data.SqlTypes 命名空间提供一些类,它们在 SQL Server 2005 内部用于本机数据类型。

  • Microsoft.SqlServer.Server
    描述 Microsoft.SqlServer.Server 命名空间并提供相关类的表。

相关方案

  • 开发团队环境中引用的数据库。一、 网络架构的数据库对象。 您可以使用其他功能的Visual Studio可以减少风险,并在团队环境中加快发展的数据库应用程序的帮助。 可以在数据库项目中定义数据库架构、将项目置于版本控制之下,以及创建数据库单元测试以验证预期行为。