逐步解說:為檢查條件約束建立自訂資料產生器
更新:2010 年 12 月
在 Visual Studio Premium 或 Visual Studio Ultimate 中,您可以使用標準資料產生器,將資料填入資料行。 如果您想要填入的資料行上有定義檢查條件約束,則您用來填入資料行的資料必須滿足該檢查條件約束。 標準資料產生器可以產生滿足許多檢查條件約束的資料。 例如,如果您的檢查條件約束要求日期位於某個範圍中,您可以使用標準 DateTime 產生器及設定 Min 和 Max 屬性來滿足該檢查條件約束。
但是,標準資料產生器無法滿足所有的檢查條件約束。 例如,如果您的檢查條件約束要求日期位於兩個相異範圍的其中一個內,您將無法使用標準 DateTime 產生器。 在此逐步解說中,您會建立一個可以滿足這類條件約束的自訂資料產生器。 此產生器會接受兩個範圍當做輸入,並產生位於其中一個範圍內的隨機日期。
在這個逐步解說中,您將執行下列工作:
建立繼承自 Generator 的類別。
建立輸入屬性,好讓使用者可以指定兩個日期範圍。
建立輸出屬性當做產生器輸出來使用。
覆寫 OnInitialize 方法來設定 Random 物件的種子,並讓您的產生器具決定性。
覆寫 OnGenerateNextValues 方法來產生資料。
以強式名稱簽署產生器。
必要條件
您需要安裝 Visual Studio Premium 或 Visual Studio Ultimate 才能完成本逐步解說。
建立自訂資料產生器類別
透過建立類別庫,開始建立自訂資料產生器。
若要建立自訂資料產生器類別
在 Visual Studio 中,以您所選擇的語言建立類別庫專案,並將它命名為 GeneratorDateRanges。
在 [專案] 功能表上,按一下 [加入參考]。
選取 [.NET] 索引標籤。
在 [元件名稱] 欄中,找到下列元件:
[Microsoft.Data.Schema]
[Microsoft.Data.Schema.Sql]
[Microsoft.Data.Schema.Tools]
秘訣 若要選取多個元件,請在按一下時同時按住 CTRL。
當完成選取所需的全部元件後,按一下 [確定]。
選取的參考將出現在 [方案總管] 中專案的 [參考] 節點底下。
(選擇項,僅限 Visual Basic) 在 [方案總管] 中,按一下 [顯示所有檔案],並展開 [參考] 節點來驗證新的參考。
開啟 Class1 檔,然後在 [程式碼] 視窗的頂端,將下列程式碼行加入至類別宣告之前:
Imports System.Data.SqlTypes Imports Microsoft.Data.Schema.Tools.DataGenerator Imports Microsoft.Data.Schema.Extensibility Imports Microsoft.Data.Schema Imports Microsoft.Data.Schema.Sql
using System.Data.SqlTypes; using Microsoft.Data.Schema.Tools.DataGenerator; using Microsoft.Data.Schema.Extensibility; using Microsoft.Data.Schema; using Microsoft.Data.Schema.Sql;
將類別從 Class1 重新命名為 GeneratorDateRanges,並指定您的類別繼承自 Generator。
警告
根據預設,您提供給類別的名稱即為 [資料行詳細資料] 視窗中出現在 [產生器] 資料行中清單內的名稱。 您應該指定不會與標準產生器名稱或另一個自訂產生器名稱發生衝突的名稱。
Public Class GeneratorDateRanges Inherits Generator End Class
public class GeneratorDateRanges: Generator { }
加入 DatabaseSchemaProviderCompatibilityAttribute,如以下範例所示:
<DatabaseSchemaProviderCompatibility(GetType(SqlDatabaseSchemaProvider))> _ Public Class GeneratorDateRanges Inherits Generator End Class
[DatabaseSchemaProviderCompatibility(typeof(SqlDatabaseSchemaProvider))] public class GeneratorDateRanges : Generator { }
如需擴充相容性屬性的詳細資訊,請參閱擴充 Visual Studio 的資料庫功能。
在 [檔案] 功能表上按一下 [全部儲存]。
新增輸入屬性
此自訂資料產生器接受兩個日期範圍當做輸入。 若要指定每一個範圍,使用者會指定每一個範圍的最小日期和最大日期。 因此,您總共必須建立四個輸入屬性:兩個最小日期和兩個最大日期。
若要新增輸入屬性
建立四個成員變數來保存這兩個日期範圍的最小日期和最大日期:
Dim range1MinValue As SqlDateTime Dim range1MaxValue As SqlDateTime Dim range2MinValue As SqlDateTime Dim range2MaxValue As SqlDateTime
SqlDateTime range1MinValue; SqlDateTime range1MaxValue; SqlDateTime range2MinValue; SqlDateTime range2MaxValue;
建立四個屬性來設定這兩個日期範圍的最小日期和最大日期。 屬性必須有 InputAttribute,才能識別為輸入屬性。
注意事項 若要在 [屬性] 視窗中指定這個資料產生器的輸入屬性,您必須提供型別轉換子,用於輸入值與 SqlDateTime 型別的相互轉換。 若要這樣做,本逐步解說的稍後部分將指導您加入支援 SqlDateTimeConverter 類別。
<Input(TypeConverter:=GetType(SqlDateTimeConverter))> _ Public Property Range1Min() as SqlDateTime <Input(TypeConverter:=GetType(SqlDateTimeConverter))> _ Public Property Range1Max() as SqlDateTime <Input(TypeConverter:=GetType(SqlDateTimeConverter))> _ Public Property Range2Min() as SqlDateTime <Input(TypeConverter:=GetType(SqlDateTimeConverter))> _ Public Property Range2Max() as SqlDateTime
[Input(TypeConverter = typeof(SqlDateTimeConverter))] public SqlDateTime Range1Min { set {range1MinValue = value;} get {return range1MinValue;} } [Input(TypeConverter = typeof(SqlDateTimeConverter))] public SqlDateTime Range1Max { set {range1MaxValue = value;} get {return range1MaxValue;} } [Input(TypeConverter = typeof(SqlDateTimeConverter))] public SqlDateTime Range2Min { set {range2MinValue = value;} get {return range2MinValue;} } [Input(TypeConverter = typeof(SqlDateTimeConverter))] public SqlDateTime Range2Max { set {range2MaxValue = value;} get {return range2MaxValue;} }
在 [檔案] 功能表上按一下 [全部儲存]。
新增輸出屬性
此自訂資料產生器會傳回一個隨機日期當做輸出。 因此,您必須建立一個輸出屬性。
若要新增輸出屬性
建立成員變數來保存輸出的隨機日期:
Dim randomDateValue As SqlDateTime
SqlDateTime randomDateValue;
建立屬性來傳回當做輸出的隨機日期。 屬性必須有 OutputAttribute,才能識別為輸出屬性。
<Output()> _ Public ReadOnly Property RandomDate() As SqlDateTime Get Return randomDateValue End Get End Property
[Output] public SqlDateTime RandomDate { get {return randomDateValue;} }
按一下 [檔案] 功能表上的 [全部儲存]。
覆寫 OnInitialize 方法
當您產生隨機資料時,該資料可以具決定性,也可以不具決定性。 每當您從相同的種子產生資料時,具決定性的資料都會重複相同的資料。 所有的資料產生器都具有使用者可以設定的 Seed 屬性。 您可以覆寫 OnInitialize 方法來設定 Random 物件的種子,並讓您的產生器具決定性。
若要覆寫 OnInitialize 方法
建立兩個成員變數來產生亂數,如下列範例所示。 其中一個變數會產生隨機日期, 另一個變數會在兩個可能的日期範圍當中隨機選擇。
Dim random As Random Dim randomRange As Random
Random random; Random randomRange;
覆寫 OnInitialize 方法:
Protected Overrides Sub OnInitialize(ByVal initInfo As GeneratorInit) random = New Random(Me.Seed) 'deterministic randomRange = New Random(Me.Seed) 'deterministic 'random = New Random() 'non-deterministic 'randomRange = New Random() 'non-deterministic MyBase.OnInitialize(initInfo) End Sub
protected override void OnInitialize(GeneratorInit initInfo) { random = new Random(this.Seed); //deterministic randomRange = new Random(this.Seed); //deterministic //random = new Random(); //non-deterministic //randomRange = new Random(); //non-deterministic base.OnInitialize(initInfo); }
在 [檔案] 功能表上按一下 [全部儲存]。
覆寫 OnGenerateNextValues 方法
Visual Studio Premium會呼叫產生器的 OnGenerateNextValues 方法,以建立它所需的資料。 您必須覆寫這個方法來提供邏輯,該邏輯會針對輸出屬性產生隨機日期。
若要覆寫 OnGenerateNextValues 方法
覆寫 OnGenerateNextValues 方法,如以下範例所示:
Protected Overrides Sub OnGenerateNextValues() Dim min As SqlDateTime Dim max As SqlDateTime 'Generate a random date from either range 1 or range 2. 'Randomly select either range 1 or range 2 by randomly 'generating an odd or an even random number. '------------------------------------------------------------ If randomRange.Next() Mod 2 = 0 Then 'check for odd or even min = range1MinValue max = range1MaxValue Else min = range2MinValue max = range2MaxValue End If 'The formula for creating a random number in a specific range is: 'start of range + (size of range * random number between 0 and 1) 'size of range Dim range As TimeSpan = max.Value - min.Value '(size of range * random number between 0 and 1) Dim randomNumber As TimeSpan = New TimeSpan(CLng(range.Ticks * random.NextDouble())) 'start of range + (size of range * random number between 0 and 1) randomDateValue = min + randomNumber End Sub
protected override void OnGenerateNextValues() { SqlDateTime min; SqlDateTime max; //Generate a random date from either range 1 or range 2. //Randomly select either range 1 or range 2 by randomly //generating an odd or an even random number. //------------------------------------------------------------ if (randomRange.Next() % 2 == 0) //check for odd or even { min = range1MinValue; max = range1MaxValue; } else { min = range2MinValue; max = range2MaxValue; } //The formula for creating a random number in a specific range is: //start of range + (size of range * random number between 0 and 1) //size of range TimeSpan range = max.Value - min.Value; //(size of range * random number between 0 and 1) TimeSpan randomNumber = new TimeSpan((long)(range.Ticks * random.NextDouble())); //start of range + (size of range * random number between 0 and 1) randomDateValue = min + randomNumber; }
在 [檔案] 功能表上按一下 [全部儲存]。
定義型別轉換子
若要在 [屬性] 視窗中指定這個資料產生器的輸入屬性,您必須提供型別轉換子,用於輸入值與 SqlDateTime 型別的相互轉換。
若要建立 SqlDateTime 型別轉換子類別
在 [專案] 功能表上按一下 [加入類別]。
[加入新項目] 對話方塊隨即出現。
在 [名稱] 中,輸入 SqlDateTimeConverter。
在 [程式碼] 視窗上方的類別宣告之前,加入以下程式碼行:
Imports System.ComponentModel Imports System.Data.SqlTypes Imports System.Globalization
using System.ComponentModel; using System.Data.SqlTypes; using System.Globalization;
指定類別繼承自 TypeConverter:
Public Class SqlDateTimeConverter Inherits TypeConverter End Class
public class SqlDateTimeConverter: TypeConverter { }
在類別宣告內,加入類別建構函式。 如果是在 Visual Basic 中撰寫型別轉換子類別,請跳至步驟 6。
public SqlDateTimeConverter() { }
緊接著類別建構函式,加入可以查看這個型別轉換子是否可能進行特定轉換的方法:
Public Overrides Function CanConvertFrom(ByVal context As ITypeDescriptorContext, ByVal sourceType As Type) As Boolean Dim result As Boolean result = False If (sourceType Is GetType(System.String)) Then result = True Else result = MyBase.CanConvertFrom(context, sourceType) End If Return result End Function Public Overrides Function CanConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal destinationType As System.Type) As Boolean If (destinationType Is GetType(System.String)) Then Return True End If Return MyBase.CanConvertTo(context, destinationType) End Function
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { bool result = false; if (sourceType == typeof(string)) { result = true; } else { result = base.CanConvertFrom(context, sourceType); } return result; } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(string)) { return true; } return base.CanConvertTo(context, destinationType); }
最後,加入轉換子方法:
Public Overrides Function ConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object) As Object Dim dateTimeString As String dateTimeString = value.ToString If (dateTimeString.Length > 0) Then Dim dateTime As Date dateTime = Date.Parse(dateTimeString, culture) Return New SqlDateTime(dateTime) End If Return MyBase.ConvertFrom(context, culture, value) End Function Public Overrides Function ConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object, ByVal destinationType As System.Type) As Object If (destinationType Is GetType(System.String)) Then Dim dateTime As Date dateTime = CType(value, SqlDateTime).Value Return dateTime.ToString(culture) End If Return MyBase.ConvertTo(context, culture, value, destinationType) End Function
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { string dateTimeString = value as string; if (dateTimeString != null) { DateTime dateTime = DateTime.Parse(dateTimeString, culture); return new SqlDateTime(dateTime); } return base.ConvertFrom(context, culture, value); } public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { DateTime dateTime = ((SqlDateTime)value).Value; return dateTime.ToString(culture); } return base.ConvertTo(context, culture, value, destinationType); }
在 [檔案] 功能表上按一下 [全部儲存]。
簽署產生器
所有的自訂資料產生器都必須先以強式名稱簽署,然後才可以註冊。
若要以強式名稱簽署產生器
按一下 [專案] 功能表上的 [GeneratorDateRanges 屬性],開啟專案屬性。
選取 [簽署] 索引標籤上的 [簽署組件] 核取方塊。
在 [選擇強式名稱金鑰檔] 方塊中,按一下 [<新增>]。
在 [金鑰檔名稱] 方塊中,輸入 GeneratorDateRangesKey,然後輸入密碼並進行確認,再按一下 [確定]。
當您建置方案時,會使用金鑰檔來簽署組件。
在 [檔案] 功能表上按一下 [全部儲存]。
在 [建置] 功能表上,按一下 [建置方案]。
現在已經建置您的資料產生器, 接下來必須在電腦上對其進行註冊,好讓您可以在「資料產生計劃」(Data Generation Plan) 中使用它。
註冊產生器
您的組件完成簽署和編譯之後,下一步就是收集專案中產生的組件資訊,包括版本、文化特性和 PublicKeyToken,以利於註冊自訂產生器組件。
若要收集組件資訊
按一下 [檢視] 功能表上的 [其他視窗],然後按一下 [命令視窗] 開啟 [命令視窗]。
在 [命令] 視窗中輸入下列程式碼。 將 FilePath 替代為已編譯之 .dll 檔案的路徑和檔案名稱。 請在路徑和檔案名稱周圍加上引號。
注意事項 根據預設,已編譯之 .dll 檔案的路徑為 SampleGenerator\bin\Debug。
? System.Reflection.Assembly.LoadFrom("FilePath").FullName
? System.Reflection.Assembly.LoadFrom(@"FilePath").FullName
按 ENTER。 該行應該看起來如下,其中含有您的特定 PublicKeyToken:
" GeneratorDateRanges, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn"
標記或複製此組件資訊;此資訊將用於下一個程序。
接下來,您將使用在上一個程序中收集的組件資訊來建立 XML 檔案。
若要建立 XML 檔
在 [方案總管] 中,選取 GeneratorDateRanges 專案。
在 [專案] 功能表中選取 [加入新項目]。
在 [範本] 窗格中,找出並選取 [XML 檔] 項目。
在 [名稱] 文字方塊中輸入 GeneratorDateRanges.Extensions.xml,然後按一下 [加入] 按鈕。
GeneratorDateRanges.Extensions.xml 檔會加入至 [方案總管] 中的專案。
注意事項 您必須使用您的 dll 名稱 (在此例中為 "GeneratorDateRanges" 後面接著 ".Extensions.xml"),才能正確註冊組件。
開啟並更新 GeneratorDateRanges.Extensions.xml 檔,以與下列 XML 相符。 取代您在前面程序擷取的組件版本、文化特性和 PublicKeyToken。
注意事項 擴充功能型別必須使用類別的完整名稱。 在此情況下,為:擴充功能型別="GeneratorDateRanges.GeneratorDateRanges"。
<?xml version="1.0" encoding="utf-8"?> <extensions assembly="" version="1" xmlns="urn:Microsoft.Data.Schema.Extensions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:Microsoft.Data.Schema.Extensions Microsoft.Data.Schema.Extensions.xsd"> <extension type="GeneratorDateRanges.GeneratorDateRanges" assembly=" GeneratorDateRanges, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn" enabled="true"/> </extensions>
按一下 [檔案] 功能表上的 [全部儲存]。
接下來,您會將組件和 XML 檔複製到 Extensions 目錄。 當 Visual Studio Premium 啟動時,它會識別和註冊 %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions 目錄和子目錄中的任何擴充功能,以在工作階段中使用。
若要複製並註冊組件和 XML 檔到 Extensions 目錄
在 %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\ 目錄中建立名為 CustomGenerators 的資料夾。
將 GeneratorDateRanges.dll 組件檔從 ProjectFolder\GeneratorDateRanges\GeneratorDateRanges\bin\Debug\ 目錄複製到您剛才建立的 %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators 目錄中。
將 GeneratorDateRanges.Extensions.xml 檔從 ProjectFolder\GeneratorDateRanges\GeneratorDateRanges\ 目錄複製到您剛才建立的 %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators 目錄中。
注意事項 最佳做法是將擴充組件置於 %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions 目錄中的資料夾。 此策略有助您識別哪些擴充功能已包含在產品中,哪些是自訂建立的。 您也應考慮將擴充功能組織到特定類別的資料夾中。
測試日期範圍產生器
您已經建立了 DateRanges 資料產生器,您必須啟動 Visual Studio 的新執行個體。 當 Visual Studio 啟動時,它會註冊您已加入至 %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators 目錄中的 GeneratorDateRanges 組件。
接著,您可以建立「資料庫專案」(Database Project),您可在其中驗證 DateRanges 資料產生器是否正確運作。
若要建立資料庫專案
啟動 Visual Studio 的新執行個體,其會識別和註冊 GeneratorDateRanges.dll 組件。
在 [檔案] 功能表中,指向 [新增],然後按一下 [專案]。
[新增專案] 對話方塊隨即出現。
展開 [已安裝的範本] 清單中的 [資料庫],然後按一下 [SQL Server]。
按一下 [範本] 中的 [SQL Server 2008 精靈]。
在 [名稱] 中,輸入 SampleGeneratorDB。
注意事項 如果您已完成逐步解說:建立自訂資料產生器中的所有步驟,則您已經建立 SampleGeneratorDB 專案,可以跳至下一個程序若要將資料表加入至資料庫專案。
選取 [為方案建立目錄] 核取方塊。
接受 [位置]、[方案名稱] 和 [加入至原始檔控制] 的預設值,然後按一下 [確定]。
按一下 [完成]。 精靈完成時,請重新按一下 [完成]。
新的資料庫專案 SampleGeneratorDB 會出現在 [方案總管] 中。
按一下 [檢視] 功能表上的 [資料庫結構描述檢視]。
[結構描述檢視] 隨即出現 (如果尚未出現)。
接下來,您要將簡單資料表加入至專案,其中包含 DateRange SQL 型別的單一資料行。
若要將資料表加入至資料庫專案
在 [結構描述檢視] 中依次展開 [SampleGeneratorDB] 節點、[結構描述] 節點和 [dbo] 節點,然後按一下 [資料表] 節點。
按一下 [專案] 功能表上的 [加入新項目]。
注意事項 您也可以用滑鼠右鍵按一下 [結構描述檢視] 中的 SampleGeneratorDB 專案,然後指向 [加入],再按一下 [資料表]。
按一下 [範本] 中的 [資料表]。
注意事項 在 [分類] 清單中按一下 [資料表和檢視],可讓您更容易找到資料表的範本。
在 [名稱] 中,輸入 TableDates 當做要提供給新資料表的名稱。
按一下 [加入],將此資料表加入至資料庫專案中。
[方案總管] 會顯示此資料表在資料庫專案中的新檔案。 [結構描述檢視] 會顯示新的資料表物件。 Transact-SQL 編輯器隨即出現,並且會顯示新資料表的定義。
在 Transact-SQL 編輯器中修改資料表定義,使其符合下列範例:
CREATE TABLE [dbo].[TableDates] ( dates DateTime )
按一下 [檔案] 功能表上的 [儲存 TableDates.table.sql]。
資料表就緒時,您即可加入檢查條件約束,以驗證使用的日期範圍是否有效。
注意事項 |
---|
您可在其他程序中,針對自訂 DateRanges 資料產生器的屬性值輸入對應日期範圍。 如需詳細資訊,請參閱建立和設定資料產生計劃。 |
若要將檢查條件約束加入資料表
在 [結構描述檢視] 中,展開 [資料表] 節點,然後按一下 [TableDates] 資料表。
按一下 [專案] 功能表上的 [加入新項目]。
按一下 [範本] 中的 [檢查條件約束]。
注意事項 您也可以用滑鼠右鍵按一下 [結構描述檢視] 中的 [日期] 資料表,然後指向 [加入],再按一下 [檢查條件約束]。
在 [名稱] 中,輸入 CheckConstraintDateRanges 當做要提供給新檢查條件約束的名稱。
按一下 [加入],將檢查條件約束加入至資料庫專案中。
[方案總管] 會顯示檢查條件約束在資料庫專案中的新檔案。 [結構描述檢視] 會顯示新的檢查條件約束物件。 Transact-SQL 編輯器隨即出現,並且會顯示新檢查條件約束的定義。
在 Transact-SQL 編輯器中,修改檢查條件約束,使其符合下列範例:
ALTER TABLE [dbo].[TableDates] ADD CONSTRAINT [CheckConstraintDateRanges] CHECK ((dates BETWEEN '1/1/1800' AND '1/1/1900')OR(dates BETWEEN '1/1/1979' AND '12/31/2008'))
按一下 [檔案] 功能表上的 [儲存 Dates.CheckConstraintDateRanges.chkconst.sql]。
注意事項 如果您已完成逐步解說:建立自訂資料產生器中的所有步驟,則可以跳至建立和設定資料產生計劃一節。
資料表和檢查條件約束就緒時,您即可設定用於部署的資料庫。
若要進行專案部署設定
在 [方案總管] 中,按一下 SampleGeneratorDB (此為專案而不是方案)。
按一下 [專案] 功能表上的 [SampleGeneratorDB 屬性]。
專案的 [屬性] 視窗隨即出現。
注意事項 您也可以用滑鼠右鍵按一下 [方案總管] 中的 SampleGeneratorDB,然後按一下 [屬性]。
按一下 [部署] 索引標籤。
在 [部署動作] 中,按一下 [建立部署指令碼 (.sql) 並部署到資料庫]。
按一下 [編輯] 按鈕,指定目標連接。
指定您要將 SampleGeneratorDB 資料庫部署到其中之資料庫伺服器的連接資訊。
在 [選取或輸入資料庫名稱] 中,輸入 SampleGeneratorDB。
按一下 [確定]。
即會將此連接字串填入 [目標連接] 中。 請注意,[目標資料庫名稱] 會設定為 SampleGeneratorDB。
接受其他選項的預設值。
在 [檔案] 功能表上,按一下 [儲存選取項目]。
即會儲存您的專案建置設定。
接下來,您要建置資料庫專案。
若要建置資料庫專案
在 [建置] 功能表上,按一下 [建置方案]。
即會建置資料庫專案。 如果成功的話,狀態列中會出現訊息 [建置成功],而且 [輸出] 視窗中會顯示建置結果。
接下來,您要部署資料庫專案。
若要將資料庫專案部署至資料庫伺服器
在 [方案總管] 中,按一下 SampleGeneratorDB (此為專案而不是方案)。
按一下 [建置] 功能表上的 [部署 SampleGeneratorDB]。
即會使用您在組建組態中所指定的連接來部署資料庫專案。 如果成功的話,[部署成功] 訊息會出現在狀態列和 [輸出] 視窗中。
建立和設定資料產生計劃
接下來,您要建立資料產生計劃。 資料產生計劃會包含您想要將資料填入其中之資料表和資料行的相關資訊。 如需詳細資訊,請參閱 HOW TO:建立資料產生計劃。
若要建立和設定資料產生計劃
在 [方案總管] 中,選取 [資料產生計劃] 節點。
按一下 [專案] 功能表上的 [加入新項目]。
按一下 [分類] 窗格中的 [資料產生計劃]。
在 [範本] 窗格中,按一下 [資料產生計劃]。
在 [名稱] 文字方塊中,輸入 SampleGenerator.dgen。
按一下 [加入]。
即會建立資料產生計劃。 資料產生計劃和 [資料產生預覽] 視窗隨即出現。 資料產生計劃視窗會水平分割成兩個窗格。 上方窗格會列出資料庫專案結構描述中所定義的資料表,在此情況下為 dbo.TableDates 資料表。 下方窗格會針對在上方窗格中反白顯示的資料表顯示資料行詳細資料,在此情況下為地址資料行。
注意事項 如果沒有開啟 [資料產生預覽] 視窗,您可以透過開啟 [資料] 功能表、指向 [資料產生器],然後按一下 [預覽資料產生],開啟此視窗。 根據預設,[資料產生預覽] 視窗會停駐在資料產生計劃視窗的底部,並以索引標籤形式出現。 若要展開檢視,請按一下此視窗,然後按一下 [視窗] 功能表上的 [索引標籤式文件]。 您也可以用滑鼠右鍵按一下標題列,然後按一下 [停駐做為索引標籤式文件]。
在 SampleGenerator.dgen 設計工具中,驗證已同時核取 [dbo.TableDates] 資料表和 [日期] 資料行。
在資料表中,將 [要插入的資料列數] 底下的值改為 500。
在 SampleGenerator.dgen 設計工具中,選取 [日期] 資料行,並按一下 [產生器] 下拉式清單來選取 [GeneratorDateRanges]。
選取日期資料行時,在 [屬性] 視窗中輸入兩個日期範圍輸入的值:
Range1Max 12/31/2008 12:00:00 AM
Range1Min 1/1/1979 12:00:00 AM
Range2Max 1/1/1900 12:00:00 AM
Range2Min 1/1/1800 12:00 AM
您的自訂地址產生器現在已正確地設定。
在 [檔案] 功能表上按一下 [全部儲存]。
執行資料產生計劃來產生日期範圍資料
最後,您可執行資料產生器計劃,並且可以查看動作中的自訂日期範圍資料產生器。
若要執行資料產生計劃
在 [方案總管] 中按一下 [SampleGenerator.dgen]。
注意事項 此資料產生計劃必須開啟。 如果此計劃尚未開啟,請先將它開啟。
指向 [資料] 功能表上的 [資料產生器],然後按一下 [產生資料]。
[連接至資料庫] 對話方塊隨即出現。
在 [資料產生連接資訊] 清單中,按一下 [SampleGeneratorDB] 資料庫,然後按一下 [確定]。
當系統提示您是否要在插入新的資料列之前,清除資料表的內容時,請按一下 [是]。
資料隨即產生。 在擴展視窗中,狀態資料行會隨著資料產生的狀態更新。 狀態列會摘要列出所有資料表的資料產生。
(選擇性) 使用不同的工具來登入資料庫。 在這個步驟中,您可以使用 Visual Studio Premium 所提供的 Transact-SQL 編輯器。 如需詳細資訊,請參閱 Microsoft 網站上的使用 Transact-SQL 編輯器編輯資料庫指令碼和物件。 執行下列查詢來檢視新的資料:
use SampleGeneratorDB select * from dbo.TableDates
[結果] 索引標籤應顯示產生的 500 個日期。
(選擇性) 在 [屬性] 視窗中,將 [Range1Max] 的值變更為 12/31/3000 12:00:00 AM,並重複步驟 2 至 5,以重新執行資料產生器。
在 [錯誤清單] 視窗中,您可以看到由於違反檢查條件約束而產生的錯誤,其原因在於變更的日期範圍超出了允許的範圍。
請參閱
工作
參考
Microsoft.Data.Schema.Tools.DataGenerator
概念
其他資源
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2010 年 12 月 |
更正程式碼錯誤以處理客戶回函。 |
客戶回函。 |