次の方法で共有


データ生成に関する問題のトラブルシューティング

データ生成計画を操作するときに、次の問題が発生する場合があります。

  • 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

参照

概念

Database Edition の用語の概要

その他の技術情報

データ ジェネレータによるデータの生成

Transact-SQL Reference