演练:创建和部署使用 SQL CLR 对象的数据库项目

若要创建和部署使用 SQL Server 公共语言运行时 (SQL CLR) 程序集的数据库,需要首先创建一个数据库项目和一个 SQL CLR 项目。 生成和部署数据库项目时,将同时自动部署该项目所引用的 SQL CLR 程序集。

在本演练中,您将执行以下任务:

  • 创建简单的数据库项目。

  • 创建 SQL CLR 项目并定义新的数据类型。

  • 使用在 SQL CLR 程序集中定义的类型。

  • 生成和部署数据库项目。

系统必备

若要完成此演练,您必须安装了 Visual Studio 2010 高级专业版。您必须具有对 SQL Server 2005 或 SQL Server 2008 的实例的访问权限。 必须已从 CodePlex Web site(CodePlex 网站)安装 SQL Server 的代码示例。 必须拥有将数据库部署到数据库服务器的权限。

创建一个数据库项目

创建数据库项目

  1. 在**“文件”菜单上指向“新建”,再单击“项目”**。

    将显示**"新建项目"**对话框。

  2. 在**“已安装的模板”下,展开“数据库”节点,然后单击“SQL Server”**节点。

    提示

    如果使用的是 Visual Studio 2010 专业版,则还必须先展开“高级”节点,然后单击“SQL Server”

  3. 在模板列表中单击**“SQL Server 2008 数据库项目”**。

  4. 在**“名称”**中键入“SQLClrDatabaseSandbox”。

    重要说明重要事项

    不要更改“位置”“解决方案名称”中的默认值。

  5. 如果**“创建解决方案的目录”**复选框尚未选中,则选择该复选框。

  6. 如果**“添加到源代码管理”复选框尚未清除,则清除该复选框,并单击“确定”**。

    此时**“解决方案资源管理器”**中将出现一个空的数据库项目。

    接下来,将为 SQL CLR 程序集创建项目。

创建一个 SQL CLR 项目

创建 SQL CLR 项目

  1. 在**“文件”菜单上指向“添加”,然后单击“项目”**。

    将显示**"新建项目"**对话框。

  2. 在**“项目类型”中,展开“数据库”节点,然后单击“SQL Server”**。

  3. 在**“模板”列表中,单击“Visual Basic SQL CLR 数据库项目服务器项目”“Visual C# SQL CLR 数据库项目”**。

  4. 在**“名称”**中键入“SupportingSQLClrObjects”。

  5. 单击**“确定”**接受默认位置,关闭对话框并创建项目。

    此时**“解决方案资源管理器”**中将出现一个空的数据库项目。

  6. 在**“添加数据库引用”对话框中单击“取消”**。

    单击**“取消”**后,数据库项目能够确定在何处部署程序集。

    接下来,将在 SQL CLR 程序集中创建自定义数据类型。

定义自定义 SQL CLR 数据类型

  1. 在**“项目”菜单上单击“添加用户定义的类型”**。

    将显示**“添加新项”**对话框。

  2. 在**“名称”**中键入“MyCustomType.cs”。

    代码编辑器将打开并显示 MyCustomType.cs 的内容。

    提示

    此时,您应当修改默认的用户定义类型,以便提供符合要求的实现。 在本演练中,您将接受默认实现。 有关如何定义自定义类型和其他 SQL CLR 对象的更多信息,请参见 Microsoft 网站上的以下主题:Using CLR Integration in SQL Server 2005(在 SQL Server 2005 中使用 CLR 集成)。

  3. 在**“文件”菜单上单击“保存 MyCustomType.cs”**。

配置和生成 SQL CLR 程序集

  1. 在**“生成”菜单上单击“配置管理器”**。

    将显示**“配置管理器”**对话框。

  2. 在**“项目上下文”中,清除 SupportingSQLClrObjects 程序集对应行中的“部署”**复选框。

    通过清除该复选框,可以在部署解决方案时防止部署该程序集。 该程序集将随数据库项目一起部署,因此您无需将其部署两次。

  3. 单击**“关闭”**。

  4. 在**“解决方案资源管理器”中,右击 SupportingSQLClrObjects 项目,再单击“生成”**。

    将生成该程序集,并且不发生任何错误。

    接下来,将引用新程序集,并使用在该程序集中定义的类型。

使用在 SQL CLR 程序集中定义的类型

若要使用在 SQCLR 程序集中定义的类型,必须从您的数据库项目添加对该程序集的引用。 然后,在数据库项目中定义该数据类型,以便在对象定义中使用此新数据类型。

添加对 SQL CLR 程序集的引用

  1. 在**“解决方案资源管理器”中,展开 SQLClrDatabaseSandbox 项目,右击“引用”节点,然后单击“添加引用”**。

    提示

    也可在“解决方案资源管理器”中单击 SQLClrDatabaseSandbox 项目,打开“项目”菜单,然后单击“添加引用”

    将打开**“添加引用”**对话框。

  2. 在**“项目”选项卡上,确认 SupportingSQLClrObjects 项目突出显示,然后单击“确定”**。

    对 SQL CLR 项目的引用即添加到您的数据库项目中。

  3. 在**“解决方案资源管理器”**中,展开“引用”节点,单击 SupportingSQLClrObjects 节点,然后按 F4。

    将显示该引用的属性。

  4. 确认**“复制本地”设置为“True”,并且“权限级别”设置为“安全”**。

  5. 在**“程序集名称”**属性中,将 SqlClassLibrary 替换为 SupportingSQLClrObjects。

  6. 在**“所有者”**属性中,键入 dbo。

    可以指定不同的所有者。

  7. 在**“文件”菜单上,单击“全部保存”**。

    指定的属性可对生成项目时创建的 CREATE ASSEMBLY 语句进行控制。

    接下来,将对使用由 SQL CLR 项目生成的程序集的数据类型进行定义。

定义新数据类型

  1. 在**“视图”菜单上,单击“错误列表”“数据库架构视图”**。

  2. 依次展开“SQLClrDatabaseSandbox”节点、“架构”节点、“dbo”节点和“可编程性”节点。

  3. 右击“类型”节点,指向**“添加”,然后单击“用户定义的类型 CLR”**。

    将显示**“添加新项”**对话框。

  4. 在**“模板”中,确认“用户定义的类型(CLR)”**突出显示。

  5. 在**“名称”中,键入 MyCustomType,然后单击“添加”**。

    将显示 Transact-SQL 编辑器,其中显示该类型的定义。 在**“错误列表”**窗口中显示以下错误:

SR0029 : Microsoft.Validation : User Defined Type: [dbo].[MyCustomType] has an unresolved reference to Assembly [assembly_name]
  1. 在 Transact-SQL 编辑器中,更新代码以匹配以下内容:

    CREATE TYPE [dbo].[MyCustomType]
    EXTERNAL NAME [SupportingSQLClrObjects].[MyCustomType]
    
  2. 在**“文件”菜单上单击“保存 MyCustomType.udtclr.sql”**。

    在**“错误列表”**窗口中,该错误将消失,因为您已更新类型定义,引用了有效的程序集和类。

    接下来,将定义使用新数据类型的简单表。

在表定义中使用新的数据类型

  1. 在**“架构视图”**中,打开“架构”节点,再打开“dbo”节点。

  2. 右击“表”节点,指向**“添加”,然后单击“表”**。

    将显示**“添加新项”**对话框。

  3. 在**“模板”中,确认“表”**突出显示。

  4. 在**“名称”中,键入 SimpleTable,然后单击“添加”**。

    将显示 Transact-SQL 编辑器,其中显示该表的定义。

  5. 在 Transact-SQL 编辑器中,更新代码以匹配以下内容:

    CREATE TABLE [dbo].[SimpleTable]
    (
    column_1 int NOT NULL, 
    column_2 [dbo].[MyCustomType] NULL
    )
    
  6. 在**“文件”菜单上单击“保存 dbo.SimpleTable.table.sql”**。

    接下来,将配置数据库项目,然后将其部署到独立开发环境中。

生成和部署数据库项目

配置生成设置

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

  2. 在**“项目”菜单上单击“SQLClrDatabaseSandbox 属性”**。

  3. 单击**“生成”**选项卡,然后检查默认设置。

    在本演练中,可以使用默认设置。

    接下来将配置部署设置。

配置部署设置

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

  2. 在**“部署操作”列表中,单击“创建部署脚本(.sql)并部署到数据库”**。

  3. 在**“配置部署设置”列表中,单击“我的独立开发环境”**。

    通过指定此设置,可配置仅影响独立开发环境的值。 您将不更改数据库项目的设置。

  4. 在**“部署脚本名称”**中,接受默认值。

  5. 在**“目标数据库设置”中,单击“编辑”**指定目标连接。

  6. 在**“连接属性”对话框中,指定到要部署此数据库项目的服务器和数据库的连接,然后单击“确定”**。

  7. 在**“目标数据库名称”**中,接受默认值。

  8. 在**“部署配置文件”列表中,单击“Properties\Database.deploymentconfig”**。

    默认情况下,独立开发环境不会关联一组详细的开发设置。 指定此文件时,将使用与数据库项目关联的部署设置。 您也可以创建单独的配置文件,并针对独立开发环境修改设置。

  9. 在**“SQL 命令变量文件”列表中,单击“Properties\Database.sqlcmdvars”**。

  10. 在**“文件”菜单上,单击“全部保存”**。

    接下来将生成数据库项目。

生成和部署数据库项目

  1. 在**“生成”菜单上,单击“生成解决方案”**。

    将成功生成数据库项目和 SQL CLR 程序集项目。

  2. 在**“生成”菜单上单击“部署解决方案”**。

    此时数据库项目和 SQL CLR 程序集将部署到您在部署设置中指定的目标服务器和数据库。 **“输出”**窗口中将显示以下消息:

    ========== 部署: 成功 1 个,失败 0 个,跳过 1 个 ==========。

    数据库项目部署成功。 部署数据库项目的同时,也部署了 SQL CLR 程序集。 由于无需单独部署 SQL CLR 程序集,因此在部署解决方案时跳过了该程序集。

使项目可供团队使用(可选)

将项目添加到版本控制中

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

  2. 在**“文件”菜单上,指向“源代码管理”,然后单击“将解决方案添加到源代码管理”**。

    此时,您将与已安装的版本控制软件进行交互。 本演练提供了将项目添加到 Visual Studio Team Foundation Server 的步骤。 如果要使用不同的版本控制软件,请替换等效步骤。 如果您使用的是 Team Foundation Server,将出现**“连接到 Team Foundation Server”**对话框。

  3. 在**“连接到 Team Foundation Server”**中,单击承载要向其添加解决方案的团队项目的服务器。

    提示

    如果没有可将数据库项目添加到的团队项目,请参见计划和跟踪项目

  4. 在**“团队项目”中单击要将数据库项目添加到其中的团队项目,再单击“确定”**。

    将显示**“向源代码管理中添加解决方案 SQLClrDatabaseSandbox”**对话框。

  5. 单击**“确定”**接受默认值。

    您的数据库项目及其包含的文件将置于版本控制之下。 最初,它们仍处于签出状态。 只有在您将它们签入后其他团队成员才能访问它们。

  6. 在**“视图”菜单上,指向“其他窗口”,然后单击“挂起的更改”**。

    将出现**“挂起的更改”**窗口。

  7. 在“注释”字段中键入“初始数据库项目创建”。

  8. 在**“挂起的更改”窗口中,单击工具栏上的“签入”**。

    在签入数据库项目及其包含的文件的过程中,将显示**“签入进度”对话框。 在“解决方案资源管理器”**中,图标将会更改,以表明文件已签入到版本控制中。

后续步骤

接下来,可创建数据库单元测试和数据生成计划以测试程序集。 有关更多信息,请参见配置数据库项目和执行测试部署

请参见

概念

开始数据库的团队开发

开始对引用其他数据库的数据库进行团队开发

开始引用 SQLCLR 对象的数据库的团队开发

对引用共享服务器对象的数据库开始团队开发

执行 Visual Studio 的数据库功能所需的权限