演练:创建和部署使用 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 的代码示例。 必须拥有将数据库部署到数据库服务器的权限。
创建一个数据库项目
创建数据库项目
在**“文件”菜单上指向“新建”,再单击“项目”**。
将显示**"新建项目"**对话框。
在**“已安装的模板”下,展开“数据库”节点,然后单击“SQL Server”**节点。
提示
如果使用的是 Visual Studio 2010 专业版,则还必须先展开“高级”节点,然后单击“SQL Server”。
在模板列表中单击**“SQL Server 2008 数据库项目”**。
在**“名称”**中键入“SQLClrDatabaseSandbox”。
重要事项 不要更改“位置”和“解决方案名称”中的默认值。
如果**“创建解决方案的目录”**复选框尚未选中,则选择该复选框。
如果**“添加到源代码管理”复选框尚未清除,则清除该复选框,并单击“确定”**。
此时**“解决方案资源管理器”**中将出现一个空的数据库项目。
接下来,将为 SQL CLR 程序集创建项目。
创建一个 SQL CLR 项目
创建 SQL CLR 项目
在**“文件”菜单上指向“添加”,然后单击“项目”**。
将显示**"新建项目"**对话框。
在**“项目类型”中,展开“数据库”节点,然后单击“SQL Server”**。
在**“模板”列表中,单击“Visual Basic SQL CLR 数据库项目服务器项目”或“Visual C# SQL CLR 数据库项目”**。
在**“名称”**中键入“SupportingSQLClrObjects”。
单击**“确定”**接受默认位置,关闭对话框并创建项目。
此时**“解决方案资源管理器”**中将出现一个空的数据库项目。
在**“添加数据库引用”对话框中单击“取消”**。
单击**“取消”**后,数据库项目能够确定在何处部署程序集。
接下来,将在 SQL CLR 程序集中创建自定义数据类型。
定义自定义 SQL CLR 数据类型
在**“项目”菜单上单击“添加用户定义的类型”**。
将显示**“添加新项”**对话框。
在**“名称”**中键入“MyCustomType.cs”。
代码编辑器将打开并显示 MyCustomType.cs 的内容。
提示
此时,您应当修改默认的用户定义类型,以便提供符合要求的实现。 在本演练中,您将接受默认实现。 有关如何定义自定义类型和其他 SQL CLR 对象的更多信息,请参见 Microsoft 网站上的以下主题:Using CLR Integration in SQL Server 2005(在 SQL Server 2005 中使用 CLR 集成)。
在**“文件”菜单上单击“保存 MyCustomType.cs”**。
配置和生成 SQL CLR 程序集
在**“生成”菜单上单击“配置管理器”**。
将显示**“配置管理器”**对话框。
在**“项目上下文”中,清除 SupportingSQLClrObjects 程序集对应行中的“部署”**复选框。
通过清除该复选框,可以在部署解决方案时防止部署该程序集。 该程序集将随数据库项目一起部署,因此您无需将其部署两次。
单击**“关闭”**。
在**“解决方案资源管理器”中,右击 SupportingSQLClrObjects 项目,再单击“生成”**。
将生成该程序集,并且不发生任何错误。
接下来,将引用新程序集,并使用在该程序集中定义的类型。
使用在 SQL CLR 程序集中定义的类型
若要使用在 SQCLR 程序集中定义的类型,必须从您的数据库项目添加对该程序集的引用。 然后,在数据库项目中定义该数据类型,以便在对象定义中使用此新数据类型。
添加对 SQL CLR 程序集的引用
在**“解决方案资源管理器”中,展开 SQLClrDatabaseSandbox 项目,右击“引用”节点,然后单击“添加引用”**。
提示
也可在“解决方案资源管理器”中单击 SQLClrDatabaseSandbox 项目,打开“项目”菜单,然后单击“添加引用”。
将打开**“添加引用”**对话框。
在**“项目”选项卡上,确认 SupportingSQLClrObjects 项目突出显示,然后单击“确定”**。
对 SQL CLR 项目的引用即添加到您的数据库项目中。
在**“解决方案资源管理器”**中,展开“引用”节点,单击 SupportingSQLClrObjects 节点,然后按 F4。
将显示该引用的属性。
确认**“复制本地”设置为“True”,并且“权限级别”设置为“安全”**。
在**“程序集名称”**属性中,将 SqlClassLibrary 替换为 SupportingSQLClrObjects。
在**“所有者”**属性中,键入 dbo。
可以指定不同的所有者。
在**“文件”菜单上,单击“全部保存”**。
指定的属性可对生成项目时创建的 CREATE ASSEMBLY 语句进行控制。
接下来,将对使用由 SQL CLR 项目生成的程序集的数据类型进行定义。
定义新数据类型
在**“视图”菜单上,单击“错误列表”和“数据库架构视图”**。
依次展开“SQLClrDatabaseSandbox”节点、“架构”节点、“dbo”节点和“可编程性”节点。
右击“类型”节点,指向**“添加”,然后单击“用户定义的类型 CLR”**。
将显示**“添加新项”**对话框。
在**“模板”中,确认“用户定义的类型(CLR)”**突出显示。
在**“名称”中,键入 MyCustomType,然后单击“添加”**。
将显示 Transact-SQL 编辑器,其中显示该类型的定义。 在**“错误列表”**窗口中显示以下错误:
SR0029 : Microsoft.Validation : User Defined Type: [dbo].[MyCustomType] has an unresolved reference to Assembly [assembly_name]
在 Transact-SQL 编辑器中,更新代码以匹配以下内容:
CREATE TYPE [dbo].[MyCustomType] EXTERNAL NAME [SupportingSQLClrObjects].[MyCustomType]
在**“文件”菜单上单击“保存 MyCustomType.udtclr.sql”**。
在**“错误列表”**窗口中,该错误将消失,因为您已更新类型定义,引用了有效的程序集和类。
接下来,将定义使用新数据类型的简单表。
在表定义中使用新的数据类型
在**“架构视图”**中,打开“架构”节点,再打开“dbo”节点。
右击“表”节点,指向**“添加”,然后单击“表”**。
将显示**“添加新项”**对话框。
在**“模板”中,确认“表”**突出显示。
在**“名称”中,键入 SimpleTable,然后单击“添加”**。
将显示 Transact-SQL 编辑器,其中显示该表的定义。
在 Transact-SQL 编辑器中,更新代码以匹配以下内容:
CREATE TABLE [dbo].[SimpleTable] ( column_1 int NOT NULL, column_2 [dbo].[MyCustomType] NULL )
在**“文件”菜单上单击“保存 dbo.SimpleTable.table.sql”**。
接下来,将配置数据库项目,然后将其部署到独立开发环境中。
生成和部署数据库项目
配置生成设置
在**“解决方案资源管理器”中单击“SQLClrDatabaseSandbox”**。
在**“项目”菜单上单击“SQLClrDatabaseSandbox 属性”**。
单击**“生成”**选项卡,然后检查默认设置。
在本演练中,可以使用默认设置。
接下来将配置部署设置。
配置部署设置
单击**“部署”**选项卡。
在**“部署操作”列表中,单击“创建部署脚本(.sql)并部署到数据库”**。
在**“配置部署设置”列表中,单击“我的独立开发环境”**。
通过指定此设置,可配置仅影响独立开发环境的值。 您将不更改数据库项目的设置。
在**“部署脚本名称”**中,接受默认值。
在**“目标数据库设置”中,单击“编辑”**指定目标连接。
在**“连接属性”对话框中,指定到要部署此数据库项目的服务器和数据库的连接,然后单击“确定”**。
在**“目标数据库名称”**中,接受默认值。
在**“部署配置文件”列表中,单击“Properties\Database.deploymentconfig”**。
默认情况下,独立开发环境不会关联一组详细的开发设置。 指定此文件时,将使用与数据库项目关联的部署设置。 您也可以创建单独的配置文件,并针对独立开发环境修改设置。
在**“SQL 命令变量文件”列表中,单击“Properties\Database.sqlcmdvars”**。
在**“文件”菜单上,单击“全部保存”**。
接下来将生成数据库项目。
生成和部署数据库项目
在**“生成”菜单上,单击“生成解决方案”**。
将成功生成数据库项目和 SQL CLR 程序集项目。
在**“生成”菜单上单击“部署解决方案”**。
此时数据库项目和 SQL CLR 程序集将部署到您在部署设置中指定的目标服务器和数据库。 **“输出”**窗口中将显示以下消息:
========== 部署: 成功 1 个,失败 0 个,跳过 1 个 ==========。
数据库项目部署成功。 部署数据库项目的同时,也部署了 SQL CLR 程序集。 由于无需单独部署 SQL CLR 程序集,因此在部署解决方案时跳过了该程序集。
使项目可供团队使用(可选)
将项目添加到版本控制中
在**“解决方案资源管理器”中,单击“SQLClrDatabaseSandbox”**节点。
在**“文件”菜单上,指向“源代码管理”,然后单击“将解决方案添加到源代码管理”**。
此时,您将与已安装的版本控制软件进行交互。 本演练提供了将项目添加到 Visual Studio Team Foundation Server 的步骤。 如果要使用不同的版本控制软件,请替换等效步骤。 如果您使用的是 Team Foundation Server,将出现**“连接到 Team Foundation Server”**对话框。
在**“连接到 Team Foundation Server”**中,单击承载要向其添加解决方案的团队项目的服务器。
提示
如果没有可将数据库项目添加到的团队项目,请参见计划和跟踪项目。
在**“团队项目”中单击要将数据库项目添加到其中的团队项目,再单击“确定”**。
将显示**“向源代码管理中添加解决方案 SQLClrDatabaseSandbox”**对话框。
单击**“确定”**接受默认值。
您的数据库项目及其包含的文件将置于版本控制之下。 最初,它们仍处于签出状态。 只有在您将它们签入后其他团队成员才能访问它们。
在**“视图”菜单上,指向“其他窗口”,然后单击“挂起的更改”**。
将出现**“挂起的更改”**窗口。
在“注释”字段中键入“初始数据库项目创建”。
在**“挂起的更改”窗口中,单击工具栏上的“签入”**。
在签入数据库项目及其包含的文件的过程中,将显示**“签入进度”对话框。 在“解决方案资源管理器”**中,图标将会更改,以表明文件已签入到版本控制中。
后续步骤
接下来,可创建数据库单元测试和数据生成计划以测试程序集。 有关更多信息,请参见配置数据库项目和执行测试部署。