チュートリアル : CHECK 制約のカスタム データ ジェネレーターの作成
更新 : 2010 年 12 月
標準データ ジェネレーターを使用すると、列に Visual Studio Premium または Visual Studio Ultimate のデータを読み込むことができます。 読み込む列に CHECK 制約が定義されている場合、列に読み込まれるデータは、その CHECK 制約を満たしている必要があります。 標準データ ジェネレーターは、さまざまな CHECK 制約を満たすデータを生成できます。 たとえば、日付が特定の範囲に存在しなければならない CHECK 制約がある場合は、標準の DateTime ジェネレーターを使用して、その CHECK 制約を満たすように [最小値] および [最大値] プロパティを設定できます。
ただし、標準データ ジェネレーターはすべての CHECK 制約を満たすことができるわけではありません。 たとえば、2 つの異なる範囲のどちらかに日付が存在しなければならない CHECK 制約がある場合は、標準の DateTime ジェネレーターは使用できません。 このチュートリアルでは、こうした制約を満たすことができるカスタム データ ジェネレーターを作成します。 ジェネレーターは、入力として 2 つの範囲を受け取り、2 つの範囲のいずれかでランダムな日付を生成します。
このチュートリアルでは、次のタスクを行います。
Generator を継承するクラスを作成します。
ユーザーが 2 つの日付の範囲を指定できる入力プロパティを作成します。
ジェネレーター出力として使用する出力プロパティを作成します。
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 キーを押しながらコンポーネントをクリックします。
必要なすべてのコンポーネントを選択したら、[OK] をクリックします。
ソリューション エクスプローラーで、選択された参照がプロジェクトの [参照設定] ノードに表示されます。
(省略可能、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 のデータベース機能の拡張」を参照してください。
[ファイル] メニューの [すべてを保存] をクリックします。
入力プロパティの追加
このカスタム データ ジェネレーターは、入力として 2 つの日付の範囲を受け取ります。 それぞれの範囲を指定するには、それぞれの日付の最小値と最大値を指定します。 したがって、日付の最小値 2 つと最大値 2 つの合わせて 4 つの入力プロパティを作成する必要があります。
入力プロパティを追加するには
2 つの日付の範囲の最小値と最大値を保持する 4 つのメンバー変数を作成します。
Dim range1MinValue As SqlDateTime Dim range1MaxValue As SqlDateTime Dim range2MinValue As SqlDateTime Dim range2MaxValue As SqlDateTime
SqlDateTime range1MinValue; SqlDateTime range1MaxValue; SqlDateTime range2MinValue; SqlDateTime range2MaxValue;
2 つの日付の範囲の最小値と最大値を設定する 4 つのプロパティを作成します。 このプロパティには、入力プロパティであることを示すために 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;} }
[ファイル] メニューの [すべてを保存] をクリックします。
出力プロパティの追加
このカスタム データ ジェネレーターは、出力として 1 つのランダムな日付を返します。 したがって、出力プロパティを 1 つ作成する必要があります。
出力プロパティを追加するには
出力用のランダムな日付を保持するメンバー変数を作成します。
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 メソッドをオーバーライドするには
次の例に示すように、乱数を生成する 2 つのメンバー変数を作成します。 一方の変数はランダムな日付を生成します。 もう一方の変数は、可能性のある 2 つの日付の範囲からランダムに選択します。
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」と入力し、パスワードとパスワードの確認を入力し、[OK] をクリックします。
ソリューションをビルドすると、このキー ファイルを使ってアセンブリが署名されます。
[ファイル] メニューの [すべてを保存] をクリックします。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
これで、データ ジェネレーターがビルドされました。 次に、このデータ ジェネレーターをコンピューターに登録して、データ生成計画で使用できるようにする必要があります。
ジェネレーターの登録
アセンブリが署名され、コンパイルされたら、ジェネレーター アセンブリの登録を効率化するために、プロジェクトで生成された、バージョン、カルチャ、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 を置換します。
注意
拡張機能の型には、クラスの完全修飾名を使用する必要があります。 この例では、extension type="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 という名前のフォルダーを作成します。
作成した %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators ディレクトリに、ProjectFolder\GeneratorDateRanges\GeneratorDateRanges\bin\Debug\ ディレクトリの GeneratorDateRanges.dll アセンブリ ファイルをコピーします。
作成した %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators ディレクトリに、ProjectFolder\GeneratorDateRanges\GeneratorDateRanges\ ディレクトリの GeneratorDateRanges.Extensions.xml ファイルをコピーします。
注意
拡張機能のアセンブリは、%Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions ディレクトリ内のフォルダーに配置することをお勧めします。 これにより、製品に付属していた拡張機能と、カスタマイズして作成した拡張機能を区別しやすくなります。 また、拡張機能をカテゴリごとに分類し、それぞれ別のフォルダーに保存することも検討してください。
日付範囲ジェネレーターのテスト
日付範囲データ ジェネレーターを作成したので、Visual Studio の新しいインスタンスを起動する必要があります。 Visual Studio が起動すると、%Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators ディレクトリに追加した GeneratorDateRanges アセンブリが登録されます。
次に、DateRanges data ジェネレーターが正しく動作することを確認できるデータベース プロジェクトを作成します。
データベース プロジェクトを作成するには
Visual Studio の新しいインスタンスを起動します。このインスタンスが GeneratorDateRanges.dll アセンブリを認識し、登録します。
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[インストールされたテンプレート] のリストで [データベース] を展開し、[SQL Server] をクリックします。
[テンプレート] の [SQL Server 2008 ウィザード] をクリックします。
[名前] ボックスに「SampleGeneratorDB」と入力します。
注意
「チュートリアル: カスタム データ ジェネレーターの作成」の手順がすべて完了している場合は、SampleGeneratorDB プロジェクトが既に作成されているため、次の手順「データベース プロジェクトにテーブルを追加するには」に進むことができます。
[ソリューションのディレクトリを作成] チェック ボックスをオンにします。
[場所] ボックス、[ソリューション名] ボックス、および [ソース管理に追加] ボックスの既定値をそのまま使用し、[OK] をクリックします。
[完了] をクリックします。 ウィザードが完了したら、もう一度 [完了] をクリックします。
ソリューション エクスプローラーに、新しいデータベース プロジェクト SampleGeneratorDB が表示されます。
[表示] メニューの [スキーマ ビュー] をクリックします。
スキーマ ビューがまだ表示されていない場合は、表示されます。
次に、列が 1 つだけの DateRange SQL 型の単純なテーブルをプロジェクトに追加します。
データベース プロジェクトにテーブルを追加するには
スキーマ ビューで、[SampleGeneratorDB] ノード、[スキーマ] ノード、[dbo] ノードを順に展開し、[テーブル] ノードをクリックします。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
注意
スキーマ ビューで [SampleGeneratorDB] プロジェクトを右クリックし、[追加] をポイントして、[テーブル] をクリックするという方法もあります。
[テンプレート] の [テーブル] をクリックします。
注意
[カテゴリ] ボックスの一覧で、[テーブルとビュー] をクリックすると、テーブルのテンプレートをより簡単に検索できます。
[名前] ボックスに、新しいテーブルの名前として「TableDates」と入力します。
[追加] をクリックして、テーブルをデータベース プロジェクトに追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しいテーブルのファイルが表示されます。 スキーマ ビューに新しいテーブル オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいテーブルの定義が表示されます。
Transact-SQL エディターで、次の例に示すようにテーブルの定義を変更します。
CREATE TABLE [dbo].[TableDates] ( dates DateTime )
[ファイル] メニューの [TableDates.table.sql の保存] をクリックします。
テーブルを準備できたので、使用された日付範囲が有効であることを検証する CHECK 制約を追加します。
注意
対応する日付範囲を別の手順でカスタム DateRanges データ ジェネレーターのプロパティ値として入力します。 詳細については、「データ生成計画の作成と設定」を参照してください。
テーブルに CHECK 制約を追加するには
スキーマ ビューで、[テーブル] ノードを展開し、[TableDates] テーブルをクリックします。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[テンプレート] の [CHECK 制約] をクリックします。
注意
スキーマ ビューで Dates テーブルを右クリックし、[追加] をポイントして、[CHECK 制約] をクリックするという方法もあります。
[名前] ボックスに、新しい CHECK 制約の名前として「CheckConstraintDateRanges」と入力します。
[追加] をクリックし、CHECK 制約をデータベース プロジェクトに追加します。
ソリューション エクスプローラーでは、データベース プロジェクトに CHECK 制約の新しいファイルが表示されます。 スキーマ ビューに新しい CHECK 制約オブジェクトが表示されます。 Transact-SQL エディターが開き、新しい CHECK 制約の定義が表示されます。
Transact-SQL エディターで、CHECK 制約の定義を次の例のように変更します。
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 の保存] をクリックします。
注意
「チュートリアル: カスタム データ ジェネレーターの作成」の手順がすべて完了している場合は、「データ生成計画の作成と設定」に進んでください。
テーブルと CHECK 制約を追加したので、データベースを配置用に設定できます。
プロジェクト配置設定を構成するには
ソリューション エクスプローラーで、[SampleGeneratorDB] (ソリューションではなくプロジェクト) をクリックします。
[プロジェクト] メニューの [SampleGeneratorDB のプロパティ] をクリックします。
プロジェクトの [プロパティ] ウィンドウが表示されます。
注意
ソリューション エクスプローラーで [SampleGeneratorDB] を右クリックし、[プロパティ] をクリックするという方法もあります。
[配置] タブをクリックします。
[配置動作] ボックスの一覧の、[配置スクリプト (.sql) を作成してデータベースに配置します] をクリックします。
[編集] をクリックし、ターゲット接続を指定します。
SampleGeneratorDB データベースを配置するデータベース サーバーへの接続情報を指定します。
[データベースの選択または入力] に「SampleGeneratorDB」と入力します。
[OK] をクリックします。
[ターゲット接続] ボックスに接続文字列が入力されます。 [ターゲット データベース名] は SampleGeneratorDB に設定されます。
その他のオプションについては既定値を使用します。
[ファイル] メニューの [選択されたファイルを上書き保存] をクリックします。
プロジェクト ビルドの設定が保存されます。
次に、データベース プロジェクトをビルドします。
データベース プロジェクトをビルドするには
[ビルド] メニューの [ソリューションのビルド] をクリックします。
データベース プロジェクトがビルドされます。 成功した場合は、ステータス バーに "ビルド正常終了" というメッセージが表示され、出力ウィンドウにビルド結果が表示されます。
次に、データベース プロジェクトを配置します。
データベース プロジェクトをデータベース サーバーに配置するには
ソリューション エクスプローラーで、[SampleGeneratorDB] (ソリューションではなくプロジェクト) をクリックします。
[ビルド] メニューの [SampleGeneratorDB の配置] をクリックします。
ビルド構成に指定した接続を使って、データベース プロジェクトが配置されます。 成功すると、"配置に成功しました。" というメッセージがステータス バーと出力ウィンドウに表示されます。
データ生成計画の作成と設定
次に、データ生成計画を作成します。 データ生成計画には、データ入力先のテーブルと列に関する情報が含まれています。 詳細については、「方法 : データ生成計画を作成する」を参照してください。
データ生成計画を作成および設定するには
ソリューション エクスプローラーで、[Data Generation Plans] ノードを選択します。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[カテゴリ] ペインで、[データ生成計画] をクリックします。
テンプレート ペインで、[データ生成計画] をクリックします。
[プロジェクト名] ボックスに「SampleGenerator.dgen」と入力します。
[追加] をクリックします。
データ生成計画が作成されます。 データ生成計画および [データ生成プレビュー] ウィンドウが表示されます。 データ生成計画ウィンドウは、上下 2 つのペインに分割されています。 上のペインには、データベース プロジェクト スキーマ内に定義されているテーブル (ここでは dbo.TableDates テーブル) が一覧表示されます。 下のペインには、上のペインで強調表示されているテーブルの列 (ここでは address 列) の詳細が表示されます。
注意
[データ生成プレビュー] ウィンドウが開いていない場合は、[データ] メニューの [データ生成] をポイントし、[データ生成のプレビュー] をクリックして開くことができます。 既定では、[データ生成プレビュー] ウィンドウは、データ生成計画ウィンドウの下部にドッキングされ、タブが付けられています。 ビューを展開するには、ウィンドウをクリックし、[ウィンドウ] メニューの [タブ付きドキュメント] をクリックします。 タイトル バーを右クリックし、[タブ付きドキュメントとしてドッキング] をクリックするという方法もあります。
SampleGenerator.dgen デザイナーで、dbo.TableDates テーブルと dates 列の両方のチェック ボックスがオンになっていることを確認します。
テーブルで、[挿入行] の値を 500 に変更します。
SampleGenerator.dgen デザイナーで、dates 列を選択し、[ジェネレーター] ボックスの一覧をクリックして [GeneratorDateRanges] をクリックします。
dates 列を選択した状態で、プロパティ ウィンドウに次の 2 つの日付範囲を入力します。
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] データベースをクリックし、[OK] をクリックします。
新しい行を挿入する前にテーブルの内容を消去するかどうか確認するメッセージが表示された場合、[はい] をクリックします。
データが生成されます。 [母集団] ウィンドウで、状態列がデータ生成の状態に更新されます。 ステータス バーには、全テーブルのデータ生成の概要が表示されます。
(省略可能) 別のツールを使用して、データベースにログオンします。 この手順で、Visual Studio Premium に組み込まれた Transact-SQL エディターを使用できます。 詳細については、Microsoft Web サイトの「データベース スクリプトと、Transact SQL エディターでのオブジェクトの編集」を参照してください。 次のクエリを実行して、新しいデータを表示します。
use SampleGeneratorDB select * from dbo.TableDates
[結果] タブに生成された 500 の日付が表示されます。
(省略可能) プロパティ ウィンドウで Range1Max の値を 12/31/3000 12:00:00 AM に変更し、手順 2. ~ 5. を繰り返してデータ ジェネレーターを再実行します。
変更した日付範囲が許容される範囲から外れていることから CHECK 制約への違反となるため、[エラー一覧] ウィンドウにエラーが表示されます。
参照
処理手順
参照
Microsoft.Data.Schema.Tools.DataGenerator
概念
カスタム データ ジェネレーターを使用した特殊なテスト データの生成
その他の技術情報
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2010 年 12 月 |
お客様からのフィードバックに基づいて、コード エラーを修正しました。 |
カスタマー フィードバック |