Share via


疑難排解資料產生問題

當您處理資料產生計劃時,可能會遇到以下問題:

  • 違反檢查條件約束時,資料產生會失敗

  • 無法將規則運算式資料產生器指派給使用者定義型別資料行

  • 無法針對具有刪除觸發程序的資料表產生資料

  • 資料繫結產生器的問題

  • 無法為 SPARSE 資料行產生資料

違反檢查條件約束時,資料產生會失敗

當您針對具有檢查條件約束的資料行產生資料時,如果產生的資料違反此條件約束,則產生作業會失敗。 在您執行計劃之前,可以使用 [資料產生預覽] 視窗來查看資料是否違反此條件約束。 如需詳細資訊,請參閱 HOW TO:預覽資料產生計畫

若要修正這個問題,您必須使用下列其中一個方法:

  • 使用 MinMax 屬性可控制資料產生的方式。 例如,假設您的資料表有兩個資料行 (命名為 StartDate 和 EndDate) 及一個檢查條件約束 (StartDate 必須在 EndDate 的前面)。 您可以將 StartDate 資料行的 Max 屬性設定為小於 EndDate 資料行的 Min 屬性,以達成您的目標。 如需詳細資訊,請參閱為資料行指定資料產生的詳細資料

  • 使用資料繫結產生器。 如需詳細資訊,請參閱資料繫結產生器

  • 使用自訂資料產生器。 如需詳細資訊,請參閱使用自訂資料產生器產生特製化測試資料

無法將規則運算式資料產生器指派給具有唯一條件約束的使用者定義型別資料行

當您嘗試將資料產生器指派給具有唯一條件約束的資料行時,可用產生器的清單只會顯示可以產生唯一值的產生器。 由於無法保證規則運算式產生器一定會產生唯一的值,所以您不能使用它來填滿具有唯一條件約束的使用者定義型別資料行。

若要產生具有唯一條件約束的使用者定義型別資料行,您必須使用資料繫結產生器或自訂資料產生器。 如需詳細資訊,請參閱資料繫結產生器使用自訂資料產生器產生特製化測試資料

無法針對具有刪除觸發程序的資料表產生資料

某些資料表的觸發程序會讓您無法刪除這些資料表中的資料列; 如果您嘗試刪除這類資料表中的資料列,該觸發程序將會復原刪除作業。 因此,您無法在正常情況下針對這類資料表或是參考這類資料表的資料表來產生資料。 例如,您無法在正常情況下針對 AdventureWorks 資料庫中的 Employee 資料表產生資料。

若要產生這類資料表的資料,請使用下列其中一個方法:

  • 停用或刪除此觸發程序、執行資料產生計劃,然後重新啟用或重新加入此觸發程序。

  • 執行資料產生計劃。 當系統提示您是否要在插入新的資料列之前,清除資料表的內容時,請按一下 []。 您所產生的新資料就會加入到資料表的任何現有資料中,如此一來,刪除觸發程序就不會發生。 這個方法可能會產生無法預期的結果,而且當任何一個資料行有唯一的條件約束時,可能會發生錯誤。

資料繫結產生器的問題

如果因為已經指定資料繫結產生器的一個或多個資料行造成資料產生失敗,[資料行詳細資料] 視窗中的 [產生器輸出] 資料行會顯示「沒有輸出」或「沒有可強迫的輸出」。 下列章節將描述這種資料產生失敗的原因。

沒有輸出

如果 [產生器輸出] 資料行顯示「沒有輸出」,您在 [Select Query] 屬性中指定的 SELECT 陳述式可能不正確。 因為不容易在 [屬性] 視窗中查看 SELECT 陳述式,您可能會想要複製陳述式並貼至 Transact-SQL 編輯器中,以確認陳述式是否正確。

沒有可強迫的輸出

如果 [產生器輸出] 資料行顯示「沒有可強迫的輸出」,表示 SELECT 陳述式傳回的資料型別無法強制轉型成正進行資料產生的資料行資料型別。 例如,如果您想要產生型別為 INT 之資料行的資料,下列 SELECT 陳述式將導致「沒有可強迫的輸出」的出現:

SELECT RAND() * (column1 - column2) AS Column1 FROM Table1

您必須更新 SELECT 陳述式,以傳回可強制轉型成 INT 的資料,如下所示:

SELECT CAST(RAND() * (column1 - column2) AS INT) AS Column1 FROM Table1

無法為 SPARSE 資料行產生資料

當您嘗試為包含一個或多個 SPARSE 資料行以及 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",大型資料表的資料產生速度可能會變慢。

如需如何變更慣用資料插入方法的詳細資訊,請參閱 HOW TO:指定資料產生器的預設值和選項。 如需如何建立和部署自訂資料產生器的詳細資訊,請參閱使用自訂資料產生器產生特製化測試資料