다음을 통해 공유


데이터 생성 문제 해결

데이터 생성 계획 작업 중에 다음 문제가 발생할 수 있습니다.

  • CHECK 제약 조건을 위반하면 데이터가 생성되지 않음

  • UNIQUE 제약 조건이 있는 사용자 정의 형식 열에 정규식 데이터 생성기를 할당할 수 없음

  • Delete 트리거가 있는 테이블의 데이터를 생성할 수 없음

  • 데이터 바운드 생성기와 관련된 문제

  • 스파스 열에 대한 데이터를 생성할 수 없음

CHECK 제약 조건을 위반하면 데이터가 생성되지 않음

CHECK 제약 조건이 있는 열의 데이터를 생성할 때 제약 조건을 위반하는 데이터가 생성되면 작업이 실패합니다. 계획을 실행하기 전에 데이터 생성 미리 보기 창을 사용하여 데이터가 제약 조건을 위반하는지 여부를 확인할 수 있습니다. 자세한 내용은 방법: 데이터 생성 계획 미리 보기를 참조하십시오.

이 문제를 해결하려면 다음 방법 중 하나를 사용해야 합니다.

  • MinMax 속성을 사용하여 데이터 생성 방법을 제어합니다. 예를 들어 테이블에 StartDate 열과 EndDate 열이 있고 StartDate가 EndDate 앞에 와야 하는 CHECK 제약 조건이 있다고 가정합니다. StartDate 열의 Max 속성을 EndDate 열의 Min 속성보다 작은 값으로 설정하여 이 목적을 달성할 수 있습니다. 자세한 내용은 열의 데이터 생성 정보 지정을 참조하십시오.

  • 데이터 바운드 생성기를 사용합니다. 자세한 내용은 데이터 바운드 생성기를 참조하십시오.

  • 사용자 지정 데이터 생성기를 사용합니다. 자세한 내용은 사용자 지정 데이터 생성기를 통해 특수 테스트 데이터 생성을 참조하십시오.

UNIQUE 제약 조건이 있는 사용자 정의 형식 열에 정규식 데이터 생성기를 할당할 수 없음

UNIQUE 제약 조건이 있는 열에 데이터 생성기를 할당하면 사용 가능한 생성기 목록에 고유 값을 생성할 수 있는 생성기만 표시됩니다. 정규식 생성기는 항상 고유 값을 생성하지는 않으므로 UNIQUE 제약 조건이 있는 사용자 정의 형식 열을 채우는 데 사용할 수 없습니다.

UNIQUE 제약 조건이 있는 사용자 정의 형식 열의 데이터를 생성하려면 데이터 바운드 생성기 또는 사용자 지정 데이터 생성기를 사용해야 합니다. 자세한 내용은 데이터 바운드 생성기사용자 지정 데이터 생성기를 통해 특수 테스트 데이터 생성를 참조하십시오.

Delete 트리거가 있는 테이블의 데이터를 생성할 수 없음

일부 테이블에는 테이블의 행 삭제를 방지하는 트리거가 있습니다. 해당 테이블에서 행을 삭제하려고 하면 트리거가 삭제 작업을 롤백합니다. 일반적으로 이러한 테이블 또는 이 테이블을 참조하는 테이블의 데이터는 생성할 수 없습니다. 예를 들어 AdventureWorks 데이터베이스의 Employee 테이블에 대해서는 일반적으로 데이터를 생성할 수 없습니다.

이러한 테이블의 데이터를 생성하려면 다음 방법 중 하나를 사용합니다.

  • 트리거를 사용하지 않도록 설정하거나 삭제하고, 데이터 생성 계획을 실행한 다음, 트리거를 다시 사용하도록 설정하거나 추가합니다.

  • 데이터 생성 계획을 실행합니다. 새 행을 삽입하기 전에 테이블 내용을 지우라는 메시지가 표시되면 아니요를 클릭합니다. Delete 트리거가 발생하지 않도록 생성한 새 데이터가 테이블의 기존 데이터에 추가됩니다. 이 방법을 사용하면 예기치 않은 결과가 발생할 수 있으며 열 중 하나에 UNIQUE 제약 조건이 있는 경우 오류가 나타날 수도 있습니다.

데이터 바운드 생성기와 관련된 문제

데이터 바운드 생성기를 지정한 하나 이상의 열에 대해 데이터 생성이 실패하면 열 정보 창의 생성기 출력 열에 "출력 없음" 또는 "강제 출력 없음"이 표시됩니다. 다음 단원에서는 이러한 유형의 데이터 생성 오류에 대한 원인을 설명합니다.

출력 없음

생성기 출력 열에 "출력 없음"이 표시되는 경우 선택 쿼리 속성에 지정한 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

스파스 열에 대한 데이터를 생성할 수 없음

하나 이상의 스파스 열과 하나의 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
)

스파스 열과 COLUMN_SET이 포함된 테이블에 대한 데이터를 생성하려면 기본 설정된 데이터 삽입 방법을 "SqlV1CompatibilitySink"로 변경하거나 사용자 지정 데이터 생성기를 사용해야 합니다.

"SqlV1CompatibilitySink"를 사용할 경우 테이블 크기가 크면 데이터 생성 속도가 느릴 수 있습니다.

기본 설정된 데이터 삽입 방법을 변경하는 방법에 대한 자세한 내용은 방법: 데이터 생성기의 기본값 및 옵션 지정을 참조하십시오. 사용자 지정 데이터 생성기를 만들어 배포하는 방법에 대한 자세한 내용은 사용자 지정 데이터 생성기를 통해 특수 테스트 데이터 생성을 참조하십시오.