データ生成に関する問題のトラブルシューティング
データ生成計画を操作するときに、次の問題が発生する場合があります。
CHECK 制約に違反している場合、データ生成が失敗する
正規表現データ ジェネレータを、ユーザー定義型列に割り当てることができない
DELETE トリガを持つテーブルのデータを生成できない
データ バインド ジェネレータに関する問題
CHECK 制約に違反している場合、データ生成が失敗する
CHECK 制約が設定された列のデータを生成するときに、制約に違反するデータが生成された場合、操作は失敗となります。[データ生成プレビュー] ウィンドウを使用すると、計画を実行する前に、データが制約に違反するかどうかを確認できます。 詳細については、「方法 : データ生成計画をプレビューする」を参照してください。
この問題を修正するには、次の方法のいずれかを使用します。
[最小値] プロパティと [最大値] プロパティを使用して、データの生成方法を制御します。 たとえば、StartDate と EndDate という名前の 2 つの列を持つテーブルと、EndDate より前の StartDate を必要とする CHECK 制約があるとします。 StartDate 列の [最大値] プロパティを、EndDate 列の [最小値] プロパティよりも小さい値に設定すると、目標を達成できます。 詳細については、「列へのデータ生成の詳細の指定」を参照してください。
データ バインド ジェネレータを使用します。 詳細については、「データ バインド ジェネレータ」を参照してください。
カスタム データ ジェネレータを使用します。 詳細については、「カスタム データ ジェネレータの作成」を参照してください。
正規表現データ ジェネレータを、UNIQUE 制約が設定されたユーザー定義型列に割り当てることができない
データ ジェネレータを、UNIQUE 制約が設定された列に割り当てようとすると、使用可能なジェネレータの一覧には、一意の値を生成できるジェネレータのみが表示されます。 正規表現ジェネレータは一意の値を生成するとは限らないため、このジェネレータを使用して、UNIQUE 制約が設定されたユーザー定義型列に入力できません。
UNIQUE 制約が設定されたユーザー定義型列のデータを生成するには、データ バインド ジェネレータまたはカスタム データ ジェネレータを使用する必要があります。 詳細については、「データ バインド ジェネレータ」および「カスタム データ ジェネレータの作成」を参照してください。
DELETE トリガを持つテーブルのデータを生成できない
テーブル内の行を削除できないトリガを持つテーブルがあります。 このようなテーブルから行を削除しようとすると、トリガにより削除操作がロールバックされます。 通常は、このようなテーブルのデータ、またはこのようなテーブルを参照するテーブルのデータは生成できません。 たとえば、通常は AdventureWorks データベースの Employee テーブルのデータは生成できません。
このようなテーブルのデータを生成するには、次のいずれかの方法を使用します。
トリガを削除し、データ生成計画を実行して、トリガを再び追加します。
データ生成計画を実行します。 新しい行を挿入する前にテーブルの内容を消去するかどうか確認するメッセージが表示された場合は、[いいえ] をクリックします。 生成した新しいデータがテーブル内の既存データに追加され、DELETE トリガは発生しません。 この方法により予測できない結果が生じる可能性があり、いずれかの列に UNIQUE 制約が設定されている場合は、エラーが表示されることがあります。
データ バインド ジェネレータに関する問題
データ バインド ジェネレータを指定した少なくとも 1 つの列でデータの生成に失敗した場合、[列の詳細] ウィンドウの [ジェネレータ出力] 列に "出力なし" または "強制出力なし" と表示されます。 以降のセクションでは、この種のデータ生成エラーが発生する理由について説明します。
出力なし
[ジェネレータ出力] 列に "出力なし" と表示された場合、[クエリの選択] プロパティに指定した SELECT ステートメントが正しくない可能性があります。 [プロパティ] ウィンドウでは SELECT ステートメントを確認しづらいため、Transact-SQL (T-SQL) エディタにコピーして、ステートメントが正しいかどうかを確認してください。
強制出力なし
[ジェネレータ出力] 列に "強制出力なし" と表示された場合、SELECT ステートメントから返されるデータ型を、データの生成対象となる列のデータ型に対し、強制的に変換することができません。 たとえば、INT 型の列に対してデータを生成する場合、次の SELECT ステートメントを実行すると、"強制出力なし" が表示されます。
SELECT RAND() * (column1 - column2) AS Column1 FROM Table1
INT 型への強制変換が可能なデータを返すように SELECT ステートメントを更新する必要があります。
SELECT CAST(RAND() * (column1 - column2) AS INT) AS Column1 FROM Table1