若要创建和部署使用 SQL Server 公共语言运行时 (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”对话框。
-
单击“确定”接受默认值。
您的数据库项目及其包含的文件将置于版本控制之下。 最初,它们仍处于签出状态。 只有在您将它们签入后其他团队成员才能访问它们。
-
在“视图”菜单上,指向“其他窗口”,然后单击“挂起的更改”。
将出现“挂起的更改”窗口。
-
在“注释”字段中键入“初始数据库项目创建”。
-
在“挂起的更改”窗口中,单击工具栏上的“签入”。
在签入数据库项目及其包含的文件的过程中,将显示“签入进度”对话框。 在“解决方案资源管理器”中,图标将会更改,以表明文件已签入到版本控制中。
-