本文章是由機器翻譯。

資料庫開發

簡介: VSTS 資料庫的版本 GDR 中的新功能

Jamie Laflen and Barclay Hill

本文將告訴您:

  • 離線的結構描述開發
  • 產品的架構變更
  • 介紹伺服器專案
  • SQL CLR 專案支援
本文將使用下列技術:
VSTS 2008 Database Edition GDR

內容

離線的結構描述開發
資料庫系統管理
產品的架構變更
介紹伺服器專案
伺服器的專案參考
共用的伺服器層級物件的參考
系統物件的參考
專案升級
新的資料庫專案的建置和部署
命令列的設備 — VSDBCmd
SQL CLR 專案支援
靜態程式碼分析改進
Tips 和技巧

在 11 月 2008 Microsoft Visual Studio Team 系統 2008 (VSTS) 庫發行版本的一般性的通訊群組版本 (GDR)。在 GDR 安裝 VSTS 2008 資料庫 Edition,初始版本的上方,但很超過一個在次要版本升級]。在 GDR 加入 SQL Server 2008 的支援、 包含改善現有功能包含許多新功能和擴充性點,及合併的已經發行為電源工具的功能。

在這的篇文章重點特別反白顯示 [GDR,包括其支援離線的結構描述開發,中的新功能的支援時您開發資料庫結構描述,您可以使用的新程序和功能,支援資料庫系統管理工具。

除了這些處理程序的改良 VSTS 資料庫 Edition GDR 也提供下列功能:

  • 解譯和您的專案的結構描述和相依性的評估中。離線處理可讓開發人員攔截語法和參考的錯誤,才能部署時。
  • 重整 — 利用 VSTS 資料庫版本,您可以變更 (例如資料表或資料行),物件的名稱,然後該變更將會更新所有參考新的名稱。
  • 自動化的差異引擎 (當您部署專案時, 它就會產生 Transact-SQL (T-SQL) 指令碼包含只讓符合來源目標資料庫所需變更。
  • 資料庫單元測試,您可以使用在設計工具,可讓開發 T-SQL-導向測試並確認您才能在您的程式碼中檢查的結構描述。
  • 測試資料的產生,可以使用這個工具來產生虛擬隨機實際的測試資料,可以用於當您執行單元測試時。

連同功能的描述這些功能提供,您會發現在 [動作] 中顯示它們的一些實作範例。

離線的結構描述開發

過去,資料庫結構描述開發具有需要撰寫程式碼,對共用的程式開發伺服器] 與 [然後撰寫要將變更,從一個環境遷移至另一個的更新程式指令碼。這個方法不提供任何方式追蹤,並在合併資料庫的物件變更,這會進行移動變更從一個環境到另一個非常手動處理程序。

VSTS 中,資料庫版本,(例如資料表、 預存的程序和檢視表),組成您的結構描述的物件在 Visual Studio 資料庫專案中管理為 CREATE 指令碼。指令碼儲存這些物件表示您可以管理指令碼透過原始程式碼控制系統,並且會允許多個資料庫開發人員同時編輯指令碼並再合併它們適當地檢查在變更時。編輯指令碼檔案而不被連接到資料庫的程序稱為離線的結構描述的開發中。一旦您的資料庫的定義已移到 Live 資料庫的離線 / 模型化的環境,資料庫開發人員可以套用做應用程式開發 leaner 且較不昂貴的靈活或反覆運算的開發實務。

資料庫開發人員可以開始開發在 Visual Studio 中建立資料庫專案,並在專案中匯入目前的開發資料庫的離線。匯入的專案可能會引發出現一些警告,但是您會清除警告,並將專案建置成功之後,您可以檢查它到您的來源程式碼控制系統。

在簽入專案和原始程式碼之後,您小組的開發人員可以擷取專案和原始程式碼,並在他們的本機電腦上使用它們。變更可以立即進行部署於本機的沙箱管理資料庫和手動測試。這種方法可讓的開發人員如果要在隔離中運作,而不共用的資料庫環境簡介不穩定。您可以撰寫一或多個資料庫單元測試以確認變更,以修改這個方法。驗證已變更後對沙箱管理資料庫中, 執行所有單元測試的未驗證程式只能修改碼但也,變更不會中斷任何其他的程式碼。傳遞測試後,請檢查變更原始程式碼控制系統。

在簽入變更,並準備好小組時, 可以執行建置,藉由取得來源,從原始程式碼控制系統。一旦建置,然後可以部署資料庫隨著應用程式程式碼中使用者可以開始使用新開發的產品的環境。

資料庫系統管理

VSTS 資料庫版本提供了數個工具,協助執行您管理資料庫時的一般工作。一個這類工具是自動執行的比較,以及更新結構描述工作的結構描述與比較工具。您可以使用結構描述的比較來比較兩個資料庫,並再產生的更新程式指令碼,來建立、 變更,或目標資料庫中卸除物件。如果變更需要會直接在一般的部署處理序之外 Live 資料庫,您可以使用結構描述比較來比較資料庫與離線資料庫專案,並再將任何更新匯入回簽入原始程式碼控制資料庫專案。

結構描述的比較工具會有許多新功能 [GDR 中。大部分的 notable,就是使用工作階段之間保存比較的設定和選項的能力。(比較結果是無法儲存,只是選項和設定)。

保存設定及選項] 功能,專案系統,.scmp 檔案儲存在專案系統的架構比較資料夾中預設介紹新的檔案類型。可以建立多個結構描述的比較檔案,並儲存在專案。您也可以以保留您基於疑難排解或其他操作經常使用的比較設定資料庫專案儲存您的結構描述比較設定 without。

結構描述比較也現在已提供可從結構描述存取工作階段層級選項設定比較] 工具列, [圖 1 ] 所示。您可以篩選要比較中排除特定的物件型別的物件可以取代比較,在您的專案中定義的 SQLCMD 變數,指令碼選項可以定義控制更新程式的指令碼建立的方式。所有這些選項可以儲存在.scmp 檔案中。

[圖 1 的 結構描述的比較選項

結構描述比較] 工具列會提供簡單的巡覽之間比較每個結構描述的差異。您可以篩選類型的新檢視、 遺失不同,等於,或這些型別的組合的差異。結構描述比較也支援在比較.dbschema 檔案。您現在可以比較的專案、 資料庫及.dbschema 檔案的任何組合。如果目標是.dbschema 檔案是不可能使用這個的發行版本,但所有其他的組合的更新程式的撰寫會支援比較和寫入目標的更新程式。

VSTS 資料庫版本也會提供工具,它可以輕鬆地在兩個資料庫系統比較資料。利用資料比較的系統管理員可以比較資料表可以有主 / 唯一索引鍵和偵測遺失、 額外,或不同的資料位於兩個系統的位置。像結構描述比較,資料比較可以產生指令碼,將會更新直接寫入至目標系統,使其符合來源系統的資料的資料。

產品的架構變更

在 GDR 引進了一些金鑰的架構變更。最重要的其中一個是 SQL Server 資料庫的 true 模型表示。

在 VSTS 的舊版資料庫版本,所需的 SQL Server 2005 的一個設計] 執行個體。專案系統做為設計的執行個體最終驗證步驟,資料定義語言 (DDL) 指令碼在資料庫專案中。這需要有本機執行,他或她的桌面上的 SQL Server 執行個體,或在建置電腦,以建立資料庫的離線表示每個開發人員。

與的 GDR 不再需要,設計的執行個體,且專案系統支援的資料庫結構描述模型化的完整表示。在 GDR 建置 DDL 指令碼,在您的資料庫專案中從表示 SQL Server 資料庫模型,並提供在 Visual Studio 中可用的所有資料庫工具模型中。建立資料庫專案會產生.dbschema 檔案,其為模型的序列化的 XML 表示。產生部署指令碼以專案的建置輸出的比較,與目標資料庫從建立模型為基礎,資料庫專案的部署。

使用工作階段的專案中,之間資料庫專案的模型被保存在專案的根目錄下.dbml 檔案中。在.dbml 檔會提供以加速開啟,並具有較大的結構描述的現有資料庫專案的建置模型的快取。

模型是由資料庫結構描述提供者 (DSPs) 實作而來。在 GDR 包含三個 DSPs 另一個用於每個支援版本的 SQL Server,SQL Server 2008,SQL Server 2000 以及 SQL Server 2005 在之前的版本中。與提供者為基礎的模型,釋放的 VSTS 資料庫的版本現在 decoupled 從 SQL Server 的版本。當已在發行新版的 SQL Server 或 Service Pack 更新的現有版本的新功能或語法時,新的或更新的 DSP 可以釋放來支援這些變更 SQL Server 的功能。在未來版本 Visual Studio Team System 這個提供者為基礎的模型將會啟用擴充 VSTS 資料庫版本的其他資料庫平台的專案環境支援的協力廠商。

介紹伺服器專案

伺服器專案,the 的 GDR 所提供的新功能可讓小組定義自己的 SQL Server 資料庫伺服器層級組態,在獨立的專案中。伺服器專案的主要目的會是共用的預期的組態和物件之間資料庫專案中。伺服器專案可以參考多個資料庫專案中,而不複製伺服器物件的定義。例如,您可能有三個的資料庫專案每個表示您的目標伺服器上使用者資料庫。每個這些資料庫的專案必須參考至相同的伺服器專案,以確保目標資料庫伺服器的組態一致。

在 Server 專案中定義的 [伺服器組態] 設定用於驗證用途部署,期間雖然沒有實際變更在部署時,伺服器設定。部署,期間,伺服器的組態驗證以符合預期伺服器專案中所述的組態。如果組態驗證失敗,伺服器專案中所指定,部署將會失敗並沒有變更是共用的伺服器層級物件或使用者資料庫。

如果要在伺服器專案中,設定伺服器設定,您變更 server.sqlsettings 檔案 Server 專案的 [內容] 資料夾中找到。(您可以參閱 SQL Server 線上叢書 》 的每個伺服器設定會描述使用的 SQL Server 的版本)。 伺服器設定的範例如 [圖 2 ] 所示。

[圖 2] 的伺服器專案的伺服器設定的範例

預設的情況下,在部署期間驗證沒有伺服器設定。若要將驗證在部署期間設定核取 [驗證] 核取方塊,並設定 [值] 資料行預期的值]。

伺服器的專案參考

在資料庫的專案中參考伺服器層級物件的物件會需要定義的 [伺服器層級] 物件。模型化您的伺服器層級物件,在伺服器的專案中可讓您從您的資料庫專案中參考這些物件中。執行個體,如果您的資料庫專案會定義使用的是登入使用者,您要建立伺服器專案模型伺服器層級登入所需的使用者在您的資料庫專案中。如果您只能使用系統物件,並沒有共用的伺服器層級物件,即可中直接新增 master.dbschema 檔案與 [GDR 一起安裝的一個參考。

共用的伺服器層級物件的參考

伺服器專案提供支援模型共用的伺服器層級物件,具有不同的行為和範圍比使用者資料庫層級物件。無效的伺服器層級物件會參考由專案所標示的資料庫物件],並追蹤的後,伺服器專案的每個無法解析的錯誤或警告所指示的參考。

一個常見的範例,共用的伺服器層級物件的會是一個登入名稱。藉由參考伺服器專案中的 [登入] 物件,在資料庫專案中定義的使用者物件時,多個使用者資料庫可以使用相同的登入。如果您在參考一個登入名稱的資料庫專案中定義的使用者物件,您必須建立登入有您完全解決在您的資料庫專案的使用者物件的所在伺服器專案在資料庫參考。如果沒有您會收到驗證錯誤類似 [圖 3 ] 所示。

fig03.gif

[圖 3 在驗證錯誤的一個範例

若要參考伺服器專案中的物件,先建立伺服器專案,表示您的 master 資料庫。從伺服器專案範本,您可以在] 的 [新增專案] 對話方塊的 [資料庫] 專案節點下找到建立在伺服器] 專案。有三個伺服器專案範本,另一個用於每個支援版本的 SQL Server。如果目標伺服器已經存在,您可以匯入目標伺服器的 master 資料庫,到新的伺服器專案。將匯入任何使用者定義物件,在伺服器中。接下來,建置伺服器) 專案,以確認沒有問題存在,且建立.dbschema 檔案,以建立模型的伺服器。

您的資料庫專案中,您會參考伺服器專案建立新的資料庫參考。在下列的範例我有一個伺服器專案 (MyServer) 和資料庫專案 (MyDatabase) 相同的方案中。建立資料庫參考,方法滑鼠右鍵按一下 MyDatabase 專案在 [方案總管] 的 [資料庫參考] 資料夾然後按一下 [新增資料庫參考。您會看到對話方塊顯示 [圖 4 ] 中。

fig04.gif

[圖 4 : 新增資料庫參考] 對話方塊

這種類型的參考中,您應該接受預設設定 [新增資料庫參考] 對話方塊所述。使用在常值 (Literal) 的主機,讓參考的物件存在於 master 資料庫 (例如資料表) 中,藉由包含主要的常值,做為三部分名稱的一部分您資料庫物件 (例如預存程序)。如果您有無法解析伺服器層級物件參考錯誤,應該能修正新的參考。[圖 5 ] 顯示 MyDatabase 專案的資料庫參考在 [方案總管] 中建立參考之後。

fig05.gif

[圖 5 : MyDatabase 參考

系統物件的參考

如果您的資料庫專案使用的系統物件,在 master 資料庫在參考是也需要。系統物件的範例都是系統預存程序、 系統資料表、 系統] 檢視或系統資料目錄。系統物件,通常用於使用者資料庫會是 sysobjects 檢視。例如,查看預存程序中所顯示 [圖 6 ,使用 [sys.sysobjects] 和 [sys.schemas 系統] 檢視。不需要在 master 資料庫含有定義這些物件的參考,會產生許多的警告,指出預存程序中使用系統物件無法解析。因為預存的程序會允許延後的名稱解析度,這些都是無法解析的參考的警告。這個相同的 SELECT 陳述式,VIEW 定義中,會產生錯誤。

[圖 6] [ 警告,並沒有參考到 aMaster 資料庫發生錯誤

若要將這些警告您必須建立包含這些物件的定義主版資料庫的參考。不過,參考系統物件也不需要在伺服器的專案。請記住專案包含的物件和您已定義的設定的伺服器。若要參考主版資料庫包含系統物件,您可以參考以解析參考系統物件的一個 master.dbschema] 檔案。若要建立 master.dbschema 檔案參考,請定義資料庫參考,以相同方式,先前的方式呈現,但而非參考專案,參考.dbschema 檔案]。在下列目錄中,可以找到 master.dbschema 檔案:

"%programfiles%\Microsoft Visual Studio 9.0\VSTSDB\Extensions\SqlServer\
<SQL Version>\DBSchemas"

有七個.dbschema 檔案,安裝 GDR 兩個,每個 SQL Server 支援的版本和 SQL Server 2008 中可用新的 SQL 型別的其他 dbschema 檔。請注意每個支援的版本的 SQL Server 會有對應的 master.dbschema] 和 [msdb.dbschema 檔案。也值得注意的是專案的當您建立參考 master.dbschema 檔案,您模型可以採取一些時更新,因為這些.dbschema 檔案包含所有物件中定義主資料庫的 SQL Server 版本,您的目標。最後,也可能是因為它們有不同的用途,具有同時參考到一個伺服器的專案] 和 [靜態 master.dbschema 檔案參考。兩個參考會使用主要的常值。

專案升級

如果您正在使用的 VSTS 資料庫之前,先在 GDR Edition 版中建立專案的您要移動的建置前和後續部署指令碼中建立為新的伺服器專案的任何伺服器層級物件。專案升級程序期間建置前和後續部署指令碼中所定義的任何伺服器物件將會移動到名為它位於根專案資料夾,名為升級子資料夾的 upgraded.AllServerObjects.sql 指令碼檔案中。您可以匯入至新建立的伺服器專案的這個指令碼檔案,其使用匯入指令碼命令。如果要解決任何參考錯誤或警告,請從您的資料庫專案建立參考,您新的伺服器專案。

新的資料庫專案的建置和部署

考慮資料庫部署時幾個案例有立即注意到:

  • 大部分的 IT 群組會有多個部門的應用程式的建置必須移動之前到達,實際執行環境和使用者的環境。
  • 在發行的更新程式,但他們要能夠適當地更新可能與舊版的結構描述不相符的客戶結構描述時,軟體廠商記住具有目標資料庫結構描述。

這些案例是難以在 VSTS 資料庫,建置版因為當資料庫專案時,所輸出 T-SQL 部署指令碼的舊版的管理。差異資料庫專案,並在目標執行個體 (或設計資料庫執行個體) 上的資料庫,和然後撰寫指令碼,會更新 「 外觀 」 專案的來源將目標執行個體產生建置輸出。因為指令碼在建置階段中產生,發生任何方法可以採用 「 建置 」 的輸出,並執行它數次,針對不同的環境 (使用可能會有不同的結構描述)。

在的 GDR 時所採取的動作建置和部署已變更為更佳的支援,我所描述的案例。高層級建置會彙總專案的內容,並產生一組檔案,以邏輯方式表示部署套件中。部署使用 「 部署套件 」 檔案,會產生一個的部署計劃,然後該計劃藉由產生 T-SQL 指令碼來執行。您也可以設定部署至套用對目標資料庫的指令碼。在舊版,同時建置並部署可為 MSBuild 工作,以及用於為小組的組建伺服器上。

若要支援多個環境中部署一個建置,導向部署組態資訊會重整成不同的檔案。雖然使用多個檔案,將加入一些複雜性,讓您將設定部署至不同的環境在原始程式碼控制下時使用。如果要讓這具體,讓我們查看在 [圖 7 ,我們要在其中四個不同的環境中部署資料庫專案的建置所顯示的一個範例。

[圖 7 範例環境
環境 部署組態
開發 這個環境的部署永遠會重新建立資料庫。這是偵錯的專案組態。自訂的 sqlcmd 變數。
整合 部署的差異,針對物件不存在專案中位置產生 ALTER 陳述式,並捨棄。這是發行的專案組態。自訂的 sqlcmd 變數。
使用者測試 產品部署的準備工作。部署的差異。自訂的 sqlcmd 變數。
實際執行 部署的差異。自訂的 sqlcmd 變數。

請根據這些四個環境,我們可以定義四個自訂的部署組態檔和每個儲存要為目標的特定環境組態的 sqlcmd 檔案。之後設定這些檔案,專案的內容會像 [圖 8 ]。

[圖 8] 專案屬性設定自訂部署

除了在的檔案,您可以看到我已設定 development.sqldeployment 檔案預設組態偵錯的專案組態。同樣地,development.sqlcmdvars 檔案會是預設的定義 sqlcmd 變數和值。

已成功建置專案後,建置輸出可用來部署到多個資料庫執行個體。相同的建置輸出可以用來部署新的資料庫,或是更新現有的資料庫。建置專案時,預設部署如您所見先前,將使用專案的組態,但是,您可以覆寫任何.deploymanifest 屬性,在命令列上。例如,部署 [圖 8 ] 中列出的所有環境中,,您會使用下列命令列引數:

Development:

msbuild EnterpriseDB.dbproj /t:Deploy
/p:DeploymentConfiguration­File=sql\debug\Development.sqldeployment
/p:SqlCommandVariablesFile=sql\debug\Development.sqlcmdvars /p:TargetConnectionString=
   "DataSource=DEV\sql2008;Integrated Security=true;Pooling=false"

整合:

msbuild EnterpriseDB.dbproj /t:Deploy
/p:DeploymentConfigurationFile=sql\debug\Integration.sqldeployment
/p:SqlCommandVariablesFile=sql\debug\Integration.sqlcmdvars /p:TargetConnectionString=
    "DataSource=INT\sql2008;Integrated Security=true;Pooling=false"

使用者測試:

msbuild EnterpriseDB.dbproj /t:Deploy
/p:DeploymentConfigurationFile=sql\debug\UserTest.sqldeployment
/p:SqlCommandVariablesFile=sql\debug\UserTest.sqlcmdvars /p:TargetConnectionString=
   "DataSource=USERTEST\sql2008;Integrated Security=true;Pooling=false"

實際執行:

msbuild EnterpriseDB.dbproj /t:Deploy
/p:DeploymentConfigurationFile=sql\debug\Production.sqldeployment
/p:SqlCommandVariablesFile=sql\debug\Production.sqlcmdvars /p:TargetConnectionString=
   "DataSource=PRODUCTION\sql2008;Integrated Security=true;Pooling=false"

這些範例會使用部署 MSBuild 工作,來部署一個建置在 EnterpriseDB.dbproj 到多個使用不同的組態的環境。您可以執行相同類型的部署,使用新的命令列工具,以提供做為 GDR,並呼叫 VSDBCmd。

命令列的設備 — VSDBCmd

在 GDR 隨附於名為 VSDBCmd (vsdbcmd.exe) 的命令列工具。這個工具可以從現有的資料庫建立.dbschema 檔案,並部署至目標執行個體的在建置輸出或只.dbschema 檔案中。VSDBCmd 也可用於在其未安裝 Visual Studio 電腦上。若要將命令列工具從一台電腦移動到另一個,請從 VSTSDB 目錄下的 [部署] 目錄複製可執行檔及其元件。在標準的 Visual Studio 安裝,這將會是 「 %programfiles%\microsoft Visual Studio 9.0\vstsdb\deploy\。可以複製到縮圖的磁碟機上的部署目錄,並再放置在其他的電腦上。

若要介紹 VSDBCmd,讓我們從命令列執行工具。[圖 9 ] 顯示結果。雖然乍看之下可能出現複雜這些選項,有請記住,將會協助您瞭解如何分組這些選項的數個點:

  • VSDBCmd 被設計用於與多個資料庫平台。現在,VSTS 資料庫 Edition 支援只有 SQL Server 但這可能會在以後的版本中變更。
  • 若要匯入資料庫結構描述或部署至資料庫,您需要提供連接字串。這個連接字串會是資料庫提供者的標準 ADO.NET 連接字串。
  • 因為工具獨立於任何特定的資料庫提供者所以您需要提供一個提示,使用方面,提供者應該用於與連接字串,而且連接字串必須定義要判斷您的目標資料庫版本。執行個體,某些選項 SQL 伺服器部署都只使用 SQL2005 (含) 以後版本。

[圖 9 VSDBCmd 輸出

>"%programfiles%\microsoft visual studio 9.0\vstsdb\deploy\vsdbcmd" /?
Help for dynamic property usage
/help[+|-]                        (short form /?)
/Action:{Import|Deploy}           (short form /a)
/ConnectionString:<string>        (short form /cs)
/DatabaseSchemaProvider:<string>  (short form /dsp)
@<file>                           Read response file for more options

Help for command actions
/Action:{Import|Deploy}           (short form /a)
/Quiet[+|-]                       (short form /q)
/ConnectionString:<string>        (short form /cs)
/DeployToDatabase[+|-]            (short form /dd)
/ModelFile:<string>               (short form /model)
/ManifestFile:<string>            (short form /manifest)
/DeploymentScriptFile:<string>    (short form /script)
/DatabaseSchemaProvider:<string>  (short form /dsp)
/Properties:<string>              (short form /p)
@<file>                           Read response file for more options

若要建立模型,從 Northwind 資料庫,我可以執行下列作業:

"%programfiles%\microsoft visual studio 9.0\vstsdb\deploy\vsdbcmd" 
/a:Import 
/cs:"Data Source=(local)\sql2008;Integrated Security=true;Initial Catalog=Northwind08" 
/dsp:sql 
/model:northwind.dbschema

這裡我會指出我要建立名為在連接字串中所指定的資料庫的 Northwind.dbschema.dbschema 檔案。 因為 VSDBCmd 可支援多個提供者,我也必須指定提供者建立.dbschema 檔案,在此 「 SQL 提供者時使用。 您可以查看選項,以匯入模型的資料庫都是相當簡單。 有一些特定的 SQL Server 的其他匯入選項。 若要請參魷 \ cs6 \ f1 \ cf6 \ lang1024 這些選項中,,您可以使用下列動態屬性 [說明] 的命令:

"%programfiles%\microsoft visual studio 9.0\vstsdb\deploy\vsdbcmd" 
/a:Import 
/cs:"Data Source=(local)\sql2008;Integrated Security=true"
/dsp:sql 
/?

我們現在可以開啟周圍,並部署模型,我們會匯入到新的資料庫。 若要部署模型,請使用下列命令:

"%programfiles%\microsoft visual studio 9.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/cs:"Data Source=(local)\sql2008;Integrated Security=true" 
/model:northwind.dbschema 
/dd:+  
/p:TargetDatabase=NewNorthwind

這個命令會部署模型中的 Northwind.dbschema,以在執行個體 (本機) \sql2008 和名為 NewNorthwind 新的資料庫。 VSDBCmd 不部署到資料庫的選項執行時 (/ dd: +),僅部署指令碼會產生,部署專案,或使用結構描述比較產生的指令碼很類似。 在上述範例中,如果 (/ dd: +) 未指定,差異的指令碼會輸出 (因為我們沒有指定名稱,檔案名稱會是 Northwind.txt)。 這可以是良好的方法產生指令碼進行驗證,並在檢閱之前執行指令碼,對目標執行個體。

在選項 /p:TargetDatabase = NewNorthwind 是不同於其他的選項。 它是透過工具的擴充性 Framework 公開的許多選項的範例。 查看可用 SQL Server 的所有選項,使用下列命令對 SQL Server 2008 資料庫:

"%programfiles%\microsoft visual studio 9.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/cs:"Data Source=(local)\sql2008;Integrated Security=true" 
/dsp:sql 
/?

這些是可用的各種不同的部署和結構描述比較組態] 頁面上,相同選項。

除了部署.dbschema 檔案,VSDBCmd 也被用來使用並部署資料庫的專案建置的輸出。 您可以使用 VSDBCmd 執行相同的 multienvironment MSBuild 稍早執行部署。 不過,VSDBCmd,使用您不需要使用.dbproj 檔案來執行部署工作,或在有 Edition 安裝的 VSTS 資料庫。 在 [在下列的範例 VSDBCmd 執行建置輸出目錄中:

開發:

"%programfiles%\microsoft visual studio 9.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/manifest:EnterpriseDB.deploymanifest 
/p:DeploymentConfigurationFile=Development.sqldeployment 
/p:SqlCommandVariablesFile=Development.sqlcmdvars 
/cs:"Data Source=DEV\sql2008;Integrated Security=true"

整合:

"%programfiles%\microsoft visual studio 9.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/manifest:EnterpriseDB.deploymanifest 
/p:DeploymentConfigurationFile=Integration.sqldeployment 
/p:SqlCommandVariablesFile=Integration.sqlcmdvars 
/cs:"Data Source=INT\sql2008;Integrated Security=true"

使用者測試:

"%programfiles%\microsoft visual studio 9.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/manifest:EnterpriseDB.deploymanifest 
/p:DeploymentConfigurationFile=UserTest.sqldeployment 
/p:SqlCommandVariablesFile=UserTest.sqlcmdvars 
/cs:"Data Source=USERTEST\sql2008;Integrated Security=true"

實際執行:

"%programfiles%\microsoft visual studio 9.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/manifest:EnterpriseDB.deploymanifest 
/p:DeploymentConfigurationFile=Production.sqldeployment 
/p:SqlCommandVariablesFile=Production.sqlcmdvars 
/cs:"Data Source=PRODUCTION\sql2008;Integrated Security=true"

您可以從這些範例,看到 VSDBCmd 可以用來部署您的資料庫專案的建置多個使用不同的組態的環境。

SQL CLR 專案支援

從 SQL Server 2005,開發人員有能力實作型別、 程序、 函式和觸發程序,為 CLR 型別。在的 GDR 之前使用這些型別做為資料庫專案的結構描述已經困難,因為組件 C# 或 Visual Basic 專案的輸出必須以指令碼以 Base64 編碼文字加入。在的 GDR 與支援的 SQL CLR 專案已經大幅增加。他們現在可以主動地是在設計階段用來做為您的資料庫結構描述的一部分並管理專案部署期間的執行個體。讓我們逐一檢查此方式的範例。

先,建立解決方案],並加入 SQL Server 2008 的資料庫專案。接下來,請加入 SQL CLR 的 C# 專案,名為 CustomTypes,如 [圖 10 ] 所示。當這個 C# 專案便會加入時,它會提示您部署目標。因為組件的部署會將由資料庫專案來管理,則取消這個對話方塊。

[圖 10] 會 加入 SQL CLR 專案

現在將參考從資料庫專案加入至 C# 專案。類似 C# 的專案參考這個參考會表示所參考的專案的內容使用由參考的專案。加入參考,用滑鼠在資料庫專案中 [參考] 節點右鍵按一下然後按一下 [加入參考。在 [加入參考] 對話方塊中,選取 [CustomTypes 專案]。

雖然加入參考,但您仍需要自訂如何設定以便正確部署。若要修改組件的組態,請選取參考,並按下 F4 鍵]。[圖 11 ] 顯示您在屬性瀏覽器將會看到的哪些。

fig11.gif

[圖 11 CustomTypes 的設定屬性

這個範例中,我修改 AssemblyName,以符合專案的名稱] 以及 [AssemblyOwner 明確是 dbo。預設狀況下,組件的使用權限等級都是安全的。不過,如果您要部署至您的 SQL Server 執行個體的不安全的程式碼您可以變更此設定。

這時候,您可以部署組件由 CustomTypes CLR 藉由選取的專案部署從 Database1 的專案屬性。因為我們還沒有設定專案的連接字串,它會產生 CREATE 部署指令碼。在 [輸出] 視窗中您會看到 [圖 12 ] 所示的輸出。

[圖 12 部署 CustomTypes 組件

------ Build started: Project: CustomTypes, Configuration: Debug Any CPU ------
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig 
/nowarn:1701,1702 /warn:4 /define:DEBUG;TRACE /reference:C:\WINDOWS\
Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\
Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\WINDOWS\
Microsoft.NET\Framework\v2.0.50727\System.XML.dll /debug+ /debug:full 
/optimize- /out:obj\Debug\SqlClassLibrary.dll /target:library Properties\AssemblyInfo.cs

Compile complete -- 0 errors, 0 warnings
CustomTypes -> D:\Demos\Database1\CustomTypes\bin\Debug\SqlClassLibrary.dll
------ Build started: Project: Database1, Configuration: Debug Any CPU ------
    Loading project references...
    Loading project files...
    Building the project model and resolving object interdependencies...
    Validating the project model...
    Writing model to Database1.dbschema...
  Database1 -> D:\Demos\Database1\Database1\sql\debug\Database1.dbschema
------ Deploy started: Project: CustomTypes, Configuration: Debug Any CPU ------
Error: Cannot deploy. There is no database connection specified. To 
correct this error, add a database connection using the project properties.
Error: The operation could not be completed 
------ Deploy started: Project: Database1, Configuration: Debug Any CPU ------
    Deployment script generated to:
D:\Demos\Database1\Database1\sql\debug\Database1.sql

    The deployment script was generated, but was not deployed. You can 
    change the deploy action on the Deploy tab of the project properties.
========== Build: 2 succeeded or up-to-date, 0 failed, 0 skipped ==========
========== Deploy: 1 succeeded, 1 failed, 0 skipped ==========  

CustomTypes 專案參考 Database1,讓 Visual Studio 嘗試部署 Database1 前部署專案。 我們並未提供 CustomTypes 專案的連接字串,因為它無法部署,這會導致發生錯誤。 因為組件會將部署做為 Database1 部署指令碼的一部分,我們就可以忽略此錯誤。 您可以藉由關閉部署 CustomTypes 透過組態管理員,以防止這個錯誤。

建置並部署專案之後,您可以開啟 Database1 部署指令碼,並查看建立組件時向指令碼的結尾:

GO
PRINT N'Creating CustomTypes...';

GO
CREATE ASSEMBLY [CustomTypes]
    AUTHORIZATION [dbo]
    FROM 0x4D5A90000300000004[snip…]    
    WITH PERMISSION_SET = SAFE;

GO

組件的內容也可用來在建置階段驗證型別參考。 若要查看此,將加入至 CustomTypes 專案使用預設範本的一個使用者定義型別 (UDT)。 呼叫這個檔案 Type1.cs。 您可以使用這個型別資料庫中,它必須宣告在資料庫專案中。 若要將使用者定義型別 Database1] 上按一下滑鼠右鍵],按一下 [新增項目,並在然後使用 [.(CLR) 的使用者定義型別] 範本。 預設的情況下,檔案樣板所建立將會被下列:

CREATE TYPE [dbo].[Type1]
  EXTERNAL NAME [assembly_name].[type_name]

現在修改參考類型 1 的 CustomTypes,這個 T-SQL 就像這樣:

CREATE TYPE [dbo].[Type1]
  EXTERNAL NAME [CustomTypes].[Type1]

儲存這個檔案,並再查看錯誤清單。 您會看到類似下列錯誤:

TSD04117: The referenced type with the required Clr attribute was not found in the loaded 
assembly.

因為尚未建置 CustomTypes 專案,因為我們加入 Type1.cs,就會顯示這個的錯誤。 重建 CustomTypes 專案會使這項錯誤會消失。 您可以為資料行中使用這個自訂的型別下表中加入專案的型別:

CREATE TABLE [dbo].[Table1]
(
  column_1 int NOT NULL, 
  column_2 dbo.Type1 NULL
)

當資料表加入至專案時,dbo.Type1 參考就會由專案系統評估,並如果 dbo.Type1 不存在,則會造成錯誤。

除了撰寫部署指令碼,專案可以也會部署至 T: SQL 2008 執行個體如 [圖 13 ] 所示。 當專案部署至目標例項時,部署引擎就會偵測必須建立資料庫,並且在專案的內容建立正確的相依性順序。

[圖 13 部署 CustomTypes 專案

------ Build started: Project: CustomTypes, Configuration: Debug Any CPU ------
CustomTypes -> D:\Demos\Database1\CustomTypes\bin\Debug\SqlClassLibrary.dll
------ Build started: Project: Database1, Configuration: Debug Any CPU ------
    Loading project references...
    Loading project files...
    Building the project model and resolving object interdependencies...
    Validating the project model...
    Writing model to Database1.dbschema...
  Database1 -> D:\Demos\Database1\Database1\sql\debug\Database1.dbschema
------ Skipped Deploy: Project: CustomTypes, Configuration: Debug Any CPU ------
Project not selected to build for this solution configuration 
------ Deploy started: Project: Database1, Configuration: Debug Any CPU ------
    Deployment script generated to:
D:\Demos\Database1\Database1\sql\debug\Database1.sql

    Creating Database1...
    Creating CustomTypes...
    Creating dbo.Type1...
    Creating dbo.Table1...
========== Build: 2 succeeded or up-to-date, 0 failed, 0 skipped ==========
========== Deploy: 1 succeeded, 0 failed, 1 skipped ==========

靜態程式碼分析改進

在 [GDR 發行,以前靜態程式碼分析是可透過一個進階工具。在 GDR 會已整合的靜態程式碼分析,並提供數個靜態程式碼分析 (SCA) 引擎,所做執行更具彈性的變更。

SCA 現在可以為每個組建,或從命令列使用 MSBuild 來執行。若要強制以每個建置執行 SCA,切換啟用程式碼中的程式碼分析專案的屬性的部分的分析選項。每個規則或規則群組可以被視為警告 (預設值) 或發生錯誤。在專案中尋找錯誤 SCA 規則可能會導致建置失敗,中止部署。現在也可以在規則和檔案層級隱藏 SCA 警告和錯誤。

若要隱藏規則,請以滑鼠右鍵按一下的 SCA 警告 」 或 「 錯誤清單中的錯誤,然後選擇 [隱藏靜態程式碼分析郵件。規則已經被隱藏,會加入至稱為 StaticCodeAnalysis.SupressMessages.xml,專案系統的根目錄,檔案中。若要加入規則已經被隱藏,請從專案刪除檔案,或從檔案中移除特定的規則 」 和 「 檔案組合]。[圖 14 ] 顯示 [專案屬性] 視窗,以新的選項的 [程式碼分析] 區段。

[圖 14 靜態程式碼分析選項

SCA 可做為資料庫專案的組建的一部分。如果啟用 SCA,它控制項做為每個專案建置的一部分將執行,並且可能會導致建置錯誤 SCA 所偵測到如果失敗。這也是建置命令列使用 MSBuild 從啟動的。在 GDR 也提供 SCA MSBuild 目標 (StaticCodeAnalysis) 可執行獨立的建置選項的啟用 SCA SCA。

SCA 可以設定每個這表示可以定義一組規則和錯誤的選項不同,針對每個組態或環境的專案中。從命令列執行 SCA,產生稱為 StaticCodeAnalysis.results.xml 結果檔案。這個檔案會寫入 MSBuild 叫用的目錄。結果檔案的名稱,而且可以藉由覆寫 resultsfile 屬性中變更位置]。

從命令列使用 MSBuild,執行 SCA,請使用下列命令:

msbuild MyDatabase.dbproj /t:StaticCodeAnalysis

[圖 15] 顯示產生 SCA 結果檔案的範例。

[圖 15 A 範例 SCA 結果檔案

<?xml version="1.0" encoding="utf-8" ?> 
<Problems>
<Problems>
      <Rule>Microsoft.Design#SR0001</Rule> 
    <ProblemDescription>The shape of the result set produced by a SELECT 
    * statement will change if the underlying table or view structure 
    changes.</ProblemDescription> 
<SourceFile>C:\USERS\XXXX\DOCUMENTS\VISUAL STUDIO 2008\PROJECTS\ \
MYDATABASE\MYDATABASE\SCHEMA OBJECTS\SCHEMAS\DBO\PROGRAMMABILITY\STORED 
PROCEDURES\MYSTOREDPROC.PROC.SQL</SourceFile> 
  <Line>6</Line> 
  <Column>8</Column> 
  <Severity>Warning</Severity> 
  </Problems>
</Problems>

Tips 和技巧

有很多所附到筆記,我想要 GDR 之前完成的 「 其他變更。

在的 GDR 與您現在會具備 「 要將物件從一個結構描述中移動到另一個的能力。此外,the GDR 都有能力保留 [重整的變更,並發出適當 T-SQL 部署期間進行的變更,對目標伺服器。執行個體,如果您重新命名資料表的 sp_rename 發出下一個部署而卸除並重新建立資料表時。

已展開可由資料庫專案所參考的檔案類型。在的 GDR 參考可以建立下列檔案類型中:

  • 專案
  • .dbschema 檔案
  • .dll (SQL CLR 支援)
  • .xsd (XSD)

在資料庫專案或.dbschema 檔案參考的情況下,專案以邏輯方式參考另一個資料庫。如果參考沒有 part four-三個或名稱,它被視為 「 複合的專案參考。綜合的專案是新功能,可讓資料庫,以邏輯方式分割成多個專案 — 目的,是分割資料庫結構描述及安全性] 或 [組織界限-開發並再以手動方式部署正確的順序。綜合的專案才支援的資料庫的資料庫參考,不是資料庫伺服器或伺服器對伺服器的參考。在資料庫伺服器參考的情況下,參考是植入與常值 (Literal) 」 主機 」。

如先前所述的 「,SQL CLR 專案、.dll 和.xsds 參考就會是包含參考的物件到資料庫中,因此可由其他您原始程式碼的參考。將會部署這些參考的物件,做為您的資料庫專案的部署的一部分。

在 GDR 版本,[部署] 屬性頁有已重新作業以允許是否設定是儲存在專案檔 (.dbproj) 或使用者設定檔 (user) 的簡單名稱。[圖 16 ] 顯示範例。

[圖 16 沙箱 (sandbox) 組態設定

您可以與這個新的屬性頁面,指定儲存設定。預設的情況下,連線字串和部署的組態的其餘部分會儲存在專案檔,並小組成員之間共用。如果 [設定] 下拉式清單變更為 [我的外掛式的開發環境,則會儲存在 [目標資料庫設定] 下設定,user) 檔案中。

資料庫單元測試只會稍微修改 [GDR 發行的。一項變更已加入測試導向的開發,資料庫專案的部署,測試每一次執行更好的支援。使用新的組建之間分割,並部署,測試為導向的開發獲得的效能,因為資料庫專案實際上部署在每次執行測試,叫用。(這是未在先前的版本如果它必須已經執行,部署指令碼會最少運算的)。

因為大多數的開發人員會使用沙箱管理資料庫,他們的單元測試執行的而且只能更新透過測試回合的沙箱,設定已加入,在專案的.dbschema 是比.sql 指令碼時才會執行資料庫專案的部署。如果要啟用這項設定,修改測試專案的 app.config (如下所示):

<DatabaseDeployment 
 DatabaseProjectFileName="..\..\..\Database1\Database1.dbproj"
 Configuration="Debug" ForceDeployment="false"/> 

若要偵測部署是否需要執行,並區別至其他電腦上的 [部署,部署指令碼都是提供沙箱管理資料庫的名稱。 執行個體,我的沙箱管理資料庫會命名為 Database1Sandbox,使部署指令碼名為 UnitTestDeployment_Database1Sandbox.sql。 如前所述的此設定不應如果透過執行單元測試以外的其他任何方式修改沙箱管理資料庫結構描述。

擴充性也已經過更新 GDR,以便將目標不同的資料庫提供者的副檔名的方式中。 若要定義類別,當做目標特定的提供者的副檔名,您需要與 [DatabaseSchemaProviderCompatibilityAttribute 裝飾它。 若資料產生器為目標的所有 SQL 版本,這應該像下列:

[DatabaseSchemaProviderCompatibility(typeof(SqlDatabaseSchemaProvider))]

單元測試不還,包括目標資料庫提供者的概念,而且所有現有的測試條件會是獨立的提供者。 若要定義新的測試條件,請加入下列屬性 (Attribute):

[DatabaseSchemaProviderCompatibility(DspCompatibilityCategory.Any)]
[DatabaseSchemaProviderCompatibility(DspCompatibilityCategory.None)]

這些屬性 (Attribute),表示這個測試條件是有效是否沒有資料庫結構描述提供者存在,並且測試條件也會是有效的所有資料庫結構描述提供者。

Jamie Laflen 是技術導致 DBPro 小組)。 他負責單元測試的資料產生,] 和 [建置 / 部署功能。 在加入開發小組,Jamie 之前已部分 Microsoft 服務並協助客戶 implemement.NET 應用程式,在 Visual Studio。

Barclay Hill 是,程式管理員 」 和 「 新 DBPro 小組的成員。 Barclay 是至小組之後會導致許多產業多年的企業資料庫應用程式開發工作,。