若要創建和部署使用 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”對話框。
-
單擊“確定”接受默認值。
您的數據庫項目及其包含的文件將置於版本控制之下。 最初,它們仍處於簽出狀態。 只有在您將它們簽入後其他團隊成員才能訪問它們。
-
在“視圖”菜單上,指向“其他窗口”,然後單擊“掛起的更改”。
將出現“掛起的更改”窗口。
-
在“註釋”字段中鍵入“初始數據庫項目創建”。
-
在“掛起的更改”窗口中,單擊工具欄上的“簽入”。
在簽入數據庫項目及其包含的文件的過程中,將顯示“簽入進度”對話框。 在“解決方案資源管理器”中,圖標將會更改,以表明文件已簽入到版本控制中。
-