データ生成に関する問題のトラブルシューティング
データ生成計画を操作するときに、次の問題が発生する場合があります。
CHECK 制約に違反している場合、データ生成が失敗する
正規表現データ ジェネレーターを、ユーザー定義型列に割り当てることができない
DELETE トリガーを持つテーブルのデータを生成できない
データ バインド ジェネレーターに関する問題
SPARSE 列のデータを生成できない
CHECK 制約に違反している場合、データ生成が失敗する
CHECK 制約が設定された列のデータを生成するときに、制約に違反するデータが生成された場合、操作は失敗となります。 [データ生成プレビュー] ウィンドウを使用すると、計画を実行する前に、データが制約に違反するかどうかを確認できます。 詳細については、「方法 : データ生成計画をプレビューする」を参照してください。
この問題を修正するには、次の方法のいずれかを使用します。
Min プロパティと Max プロパティを使用して、データの生成方法を制御します。 たとえば、StartDate と EndDate という名前の 2 つの列を持つテーブルと、EndDate より前の StartDate を必要とする CHECK 制約があるとします。 StartDate 列の Max プロパティを、EndDate 列の Min プロパティよりも小さい値に設定すると、目標を達成できます。 詳細については、「列へのデータ生成の詳細の指定」を参照してください。
データ バインド ジェネレーターを使用します。 詳細については、「データ バインド ジェネレーター」を参照してください。
カスタム データ ジェネレーターを使用します。 詳細については、「カスタム データ ジェネレーターを使用した特殊なテスト データの生成」を参照してください。
正規表現データ ジェネレーターを、UNIQUE 制約が設定されたユーザー定義型列に割り当てることができない
データ ジェネレーターを、UNIQUE 制約が設定された列に割り当てようとすると、使用可能なジェネレーターの一覧には、一意の値を生成できるジェネレーターのみが表示されます。 正規表現ジェネレーターは一意の値を生成するとは限らないため、このジェネレーターを使用して、UNIQUE 制約が設定されたユーザー定義型列に入力できません。
UNIQUE 制約が設定されたユーザー定義型列のデータを生成するには、データ バインド ジェネレーターまたはカスタム データ ジェネレーターを使用する必要があります。 詳細については、「データ バインド ジェネレーター」および「カスタム データ ジェネレーターを使用した特殊なテスト データの生成」を参照してください。
DELETE トリガーを持つテーブルのデータを生成できない
テーブル内の行を削除できないトリガーを持つテーブルがあります。 このようなテーブルから行を削除しようとすると、トリガーにより削除操作がロールバックされます。 通常は、このようなテーブルのデータ、またはこのようなテーブルを参照するテーブルのデータは生成できません。 たとえば、通常は AdventureWorks データベースの Employee テーブルのデータは生成できません。
このようなテーブルのデータを生成するには、次のいずれかの方法を使用します。
トリガーを無効にするか、または削除し、データ生成計画を実行して、トリガーを再び有効にするか追加します。
データ生成計画を実行します。 新しい行を挿入する前にテーブルの内容を消去するかどうか確認するメッセージが表示された場合は、[いいえ] をクリックします。 生成した新しいデータがテーブル内の既存データに追加され、DELETE トリガーは発生しません。 この方法により予測できない結果が生じる可能性があり、いずれかの列に UNIQUE 制約が設定されている場合は、エラーが表示されることがあります。
データ バインド ジェネレーターに関する問題
データ バインド ジェネレーターを指定した 1 つ以上の列でデータの生成に失敗した場合、[列の詳細] ウィンドウの [ジェネレーター出力] 列に "出力なし" または "強制出力なし" と表示されます。 以降のセクションでは、この種のデータ生成エラーが発生する理由について説明します。
出力なし
[ジェネレーター出力] 列に "出力なし" と表示された場合、クエリの選択プロパティに指定した SELECT ステートメントが正しくない可能性があります。 プロパティ ウィンドウでは SELECT ステートメントを確認しづらいため、Transact-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
SPARSE 列のデータを生成できない
1 つ以上の SPARSE 列と 1 つの COLUMN_SET を含むテーブルのデータを生成しようとしたときに、"次の例外が発生したため、データを生成できませんでした: 指定された ColumnMapping は、ソースまたはターゲットのどの列とも一致しません" というエラーが表示されることがあります。
たとえば、次のテーブルのデータを生成しようとしたときに、このエラーが発生します。
CREATE TABLE [dbo].[SparseTable]
(
ID INT PRIMARY KEY,
C1 varchar(20) SPARSE NULL,
C2 smallint SPARSE NULL,
C3 varchar(20) SPARSE NULL,
SpecialPurposeColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
)
SPARSE 列と COLUMN_SET を含むテーブルのデータを生成するには、データ挿入方法の指定を "SqlV1CompatibilitySink" に変更するか、カスタム データ ジェネレーターを使用する必要があります。
"SqlV1CompatibilitySink" を使用する場合、サイズの大きなテーブルではデータ生成の速度が低下することがあります。
データ挿入方法の指定を変更する方法の詳細については、「方法: データ ジェネレーターの既定値とオプションを指定する」を参照してください。 カスタム データ ジェネレーターを作成および配置する方法の詳細については、「カスタム データ ジェネレーターを使用した特殊なテスト データの生成」を参照してください。