연습: CHECK 제약 조건에 맞는 사용자 지정 데이터 생성기 만들기

업데이트: 2010년 12월

Visual Studio Premium 또는 Visual Studio Ultimate에서 표준 데이터 생성기를 사용하여 열에 데이터를 채울 수 있습니다. 채우려는 열에 CHECK 제약 조건이 정의되어 있는 경우에는 열에 채우는 데이터가 CHECK 제약 조건에 맞아야 합니다. 표준 데이터 생성기에서는 여러 CHECK 제약 조건에 맞는 데이터를 생성할 수 있습니다. 예를 들어 날짜가 특정 범위에 포함되어야 하는 CHECK 제약 조건의 경우 표준 DateTime 생성기를 사용하고 최소값 및 최대값 속성을 설정하여 CHECK 제약 조건을 충족할 수 있습니다.

그러나 CHECK 제약 조건 중 일부는 표준 데이터 생성기에서 충족할 수 없습니다. 예를 들어 특정 날짜가 서로 다른 두 범위 중 하나에 포함되어야 하는 CHECK 제약 조건의 경우 표준 DateTime 생성기를 사용할 수 없습니다. 이 연습에서는 이러한 제약 조건을 충족할 수 있는 사용자 지정 데이터 생성기를 만듭니다. 이 생성기에서는 두 범위를 입력으로 받아 이러한 범위 중 하나에 포함되는 무작위 날짜를 생성합니다.

이 연습에서는 다음 작업을 수행합니다.

  • Generator에서 상속된 클래스를 만듭니다.

  • 사용자가 두 날짜 범위를 지정할 수 있는 입력 속성을 만듭니다.

  • 생성기 출력으로 사용할 출력 속성을 만듭니다.

  • OnInitialize 메서드를 재정의하여 Random 개체의 시드 값을 지정하고 생성기를 명확하게 만듭니다.

  • 데이터를 생성하도록 OnGenerateNextValues 메서드를 재정의합니다.

  • 강력한 이름으로 생성기에 서명합니다.

사전 요구 사항

이 연습을 완료하려면 Visual Studio Premium 또는 Visual Studio Ultimate이 설치되어 있어야 합니다.

사용자 지정 데이터 생성기 클래스 만들기

사용자 지정 데이터 생성기를 만들려면 먼저 클래스 라이브러리를 만듭니다.

사용자 지정 데이터 생성기 클래스를 만들려면

  1. Visual Studio에서 원하는 언어로 클래스 라이브러리 프로젝트를 만들고 이름을 GeneratorDateRanges로 지정합니다.

  2. 프로젝트 메뉴에서 참조 추가를 클릭합니다.

  3. .NET 탭을 선택합니다.

  4. 구성 요소 이름 열에서 다음 구성 요소를 찾습니다.

    • [Microsoft.Data.Schema]

    • [Microsoft.Data.Schema.Sql]

    • [Microsoft.Data.Schema.Tools]

    구성 요소를 여러 개 선택하려면 Ctrl 키를 누른 상태에서 클릭합니다.

  5. 필요한 모든 구성 요소를 선택했으면 확인을 클릭합니다.

    솔루션 탐색기에서 프로젝트의 참조 노드 아래에 선택한 참조가 표시됩니다.

  6. Visual Basic의 경우 필요에 따라 솔루션 탐색기에서 모든 파일 표시를 클릭하고 참조 노드를 확장하여 새 참조를 확인합니다.

  7. Class1 파일을 연 다음 코드 창의 맨 위에 있는 클래스 선언 앞에 다음 코드 줄을 추가합니다.

    Imports System.Data.SqlTypes
    Imports Microsoft.Data.Schema.Tools.DataGenerator
    Imports Microsoft.Data.Schema.Extensibility
    Imports Microsoft.Data.Schema
    Imports Microsoft.Data.Schema.Sql
    
    using System.Data.SqlTypes;
    using Microsoft.Data.Schema.Tools.DataGenerator;
    using Microsoft.Data.Schema.Extensibility;
    using Microsoft.Data.Schema;
    using Microsoft.Data.Schema.Sql;
    
  8. 클래스 이름을 Class1에서 GeneratorDateRanges로 바꾸고 클래스가 Generator에서 상속되도록 지정합니다.

    경고

    기본적으로 클래스에 지정하는 이름은 열 정보 창의 생성기 열에 있는 목록에 표시되는 이름입니다. 이때 표준 생성기 또는 다른 사용자 지정 생성기와 충돌하지 않는 이름을 지정해야 합니다.

    Public Class GeneratorDateRanges
        Inherits Generator
    
    End Class
    
    public class GeneratorDateRanges: Generator
    {
    }
    
  9. 다음 예제와 같이 DatabaseSchemaProviderCompatibilityAttribute를 추가합니다.

    <DatabaseSchemaProviderCompatibility(GetType(SqlDatabaseSchemaProvider))> _
    Public Class GeneratorDateRanges
        Inherits Generator
    
    End Class
    
    [DatabaseSchemaProviderCompatibility(typeof(SqlDatabaseSchemaProvider))]
    public class GeneratorDateRanges  : Generator
    {
    }
    

    확장 호환성 특성에 대한 자세한 내용은 Visual Studio의 데이터베이스 기능 확장을 참조하십시오.

  10. 파일 메뉴에서 모두 저장을 클릭합니다.

입력 속성 추가

이 사용자 지정 데이터 생성기에서는 두 날짜 범위를 입력받습니다. 사용자는 각 범위의 최소 및 최대 날짜를 지정하여 범위를 지정합니다. 따라서 두 개의 최소 날짜와 두 개의 최대 날짜, 즉 모두 네 개의 입력 속성을 만들어야 합니다.

입력 속성을 추가하려면

  1. 두 날짜 범위의 최소 날짜와 최대 날짜를 저장할 네 개의 멤버 변수를 만듭니다.

    Dim range1MinValue As SqlDateTime
    Dim range1MaxValue As SqlDateTime
    
    Dim range2MinValue As SqlDateTime
    Dim range2MaxValue As SqlDateTime
    
    SqlDateTime range1MinValue;
    SqlDateTime range1MaxValue;
    
    SqlDateTime range2MinValue;
    SqlDateTime range2MaxValue;
    
  2. 두 날짜 범위의 최소 날짜와 최대 날짜를 설정할 네 개의 속성을 만듭니다. 이러한 속성에는 입력 속성임을 식별하는 InputAttribute가 있어야 합니다.

    참고

    속성 창에서 이 데이터 생성기에 대해 입력 속성을 지정하려면 입력 값과 SqlDateTime 형식 간을 변환하는 형식 변환기를 제공해야 합니다. 이를 위해 이 연습의 뒷부분에서는 지원 클래스 SqlDateTimeConverter를 추가합니다.

    <Input(TypeConverter:=GetType(SqlDateTimeConverter))> _
    Public Property Range1Min() as SqlDateTime
    
    <Input(TypeConverter:=GetType(SqlDateTimeConverter))> _
    Public Property Range1Max() as SqlDateTime 
    
    <Input(TypeConverter:=GetType(SqlDateTimeConverter))> _
    Public Property Range2Min() as SqlDateTime 
    
    <Input(TypeConverter:=GetType(SqlDateTimeConverter))> _
    Public Property Range2Max() as SqlDateTime 
    
    [Input(TypeConverter = typeof(SqlDateTimeConverter))]
    public SqlDateTime Range1Min
    {
        set {range1MinValue = value;}
        get {return range1MinValue;}
    }
    
    [Input(TypeConverter = typeof(SqlDateTimeConverter))]
    public SqlDateTime Range1Max
    {
        set {range1MaxValue = value;}
        get {return range1MaxValue;}
    }
    
    [Input(TypeConverter = typeof(SqlDateTimeConverter))]
    public SqlDateTime Range2Min
    {
        set {range2MinValue = value;}
        get {return range2MinValue;}
    }
    
    [Input(TypeConverter = typeof(SqlDateTimeConverter))]
    public SqlDateTime Range2Max
    {
        set {range2MaxValue = value;}
        get {return range2MaxValue;}
    }
    
  3. 파일 메뉴에서 모두 저장을 클릭합니다.

출력 속성 추가

이 사용자 지정 데이터 생성기에서는 하나의 무작위 날짜를 출력으로 반환합니다. 따라서 하나의 출력 속성을 만들어야 합니다.

출력 속성을 추가하려면

  1. 출력 값인 무작위 날짜를 저장할 멤버 변수를 만듭니다.

    Dim randomDateValue As SqlDateTime
    
    SqlDateTime randomDateValue;
    
  2. 무작위 날짜를 출력으로 반환할 속성을 만듭니다. 이 속성에는 출력 속성임을 식별하는 OutputAttribute가 있어야 합니다.

    <Output()> _
    Public ReadOnly Property RandomDate() As SqlDateTime
        Get
            Return randomDateValue
        End Get
    End Property
    
    [Output]
    public SqlDateTime RandomDate
    {
        get {return randomDateValue;}
    }
    
  3. 파일 메뉴에서 모두 저장을 클릭합니다.

OnInitialize 메서드 재정의

무작위 데이터를 생성하는 경우 데이터가 명확할 수도 있고 그렇지 않을 수도 있습니다. 명확한 데이터의 경우 같은 시드를 사용하여 데이터를 생성할 때마다 동일한 데이터가 반복됩니다. 모든 데이터 생성기에는 사용자가 설정할 수 있는 Seed 속성이 있습니다. OnInitialize 메서드를 재정의하여 Random 개체의 시드 값을 지정하고 생성기를 명확하게 만들 수 있습니다.

OnInitialize 메서드를 재정의하려면

  1. 다음 예제와 같이 난수를 생성할 두 멤버 변수를 만듭니다. 변수 중 하나에서는 무작위 날짜를 생성하고, 다른 하나에서는 사용 가능한 두 날짜 범위 중 하나를 선택합니다.

    Dim random As Random
    Dim randomRange As Random
    
    Random random;
    Random randomRange;
    
  2. OnInitialize 메서드를 재정의합니다.

    Protected Overrides Sub OnInitialize(ByVal initInfo As GeneratorInit)
    
        random = New Random(Me.Seed)       'deterministic
        randomRange = New Random(Me.Seed)  'deterministic
    
        'random = New Random()              'non-deterministic
        'randomRange = New Random()         'non-deterministic
    
        MyBase.OnInitialize(initInfo)
    End Sub
    
    protected override void OnInitialize(GeneratorInit initInfo)
    {
        random = new Random(this.Seed);       //deterministic
        randomRange = new Random(this.Seed);  //deterministic
    
        //random = new Random();                //non-deterministic
        //randomRange = new Random();           //non-deterministic
    
        base.OnInitialize(initInfo);
    }
    
  3. 파일 메뉴에서 모두 저장을 클릭합니다.

OnGenerateNextValues 메서드 재정의

Visual Studio Premium에서는 생성기의 OnGenerateNextValues 메서드를 호출하여 필요한 데이터를 만듭니다. 출력 속성에 사용할 무작위 날짜를 생성하는 논리를 제공하려면 이 메서드를 재정의해야 합니다.

OnGenerateNextValues 메서드를 재정의하려면

  1. 다음 예제와 같이 OnGenerateNextValues 메서드를 재정의합니다.

    Protected Overrides Sub OnGenerateNextValues()
    
        Dim min As SqlDateTime
        Dim max As SqlDateTime
    
        'Generate a random date from either range 1 or range 2.
        'Randomly select either range 1 or range 2 by randomly 
        'generating an odd or an even random number.
        '------------------------------------------------------------
        If randomRange.Next() Mod 2 = 0 Then  'check for odd or even
            min = range1MinValue
            max = range1MaxValue
        Else
            min = range2MinValue
            max = range2MaxValue
        End If
    
        'The formula for creating a random number in a specific range is:
        'start of range + (size of range * random number between 0 and 1)
    
        'size of range
        Dim range As TimeSpan = max.Value - min.Value
    
        '(size of range * random number between 0 and 1)
        Dim randomNumber As TimeSpan = New TimeSpan(CLng(range.Ticks * random.NextDouble()))
    
        'start of range + (size of range * random number between 0 and 1)
        randomDateValue = min + randomNumber
    
    End Sub
    
    protected override void OnGenerateNextValues()
    {
        SqlDateTime min;
        SqlDateTime max;
    
        //Generate a random date from either range 1 or range 2.
        //Randomly select either range 1 or range 2 by randomly 
        //generating an odd or an even random number.
        //------------------------------------------------------------
        if (randomRange.Next() % 2 == 0)  //check for odd or even
        {
            min = range1MinValue;
            max = range1MaxValue;
        }
        else
        {
            min = range2MinValue;
            max = range2MaxValue;
        }
    
        //The formula for creating a random number in a specific range is:
        //start of range + (size of range * random number between 0 and 1)
    
        //size of range
        TimeSpan range = max.Value - min.Value;
    
        //(size of range * random number between 0 and 1)
        TimeSpan randomNumber = new TimeSpan((long)(range.Ticks * random.NextDouble()));
    
        //start of range + (size of range * random number between 0 and 1)
        randomDateValue = min + randomNumber;
    }
    
  2. 파일 메뉴에서 모두 저장을 클릭합니다.

형식 변환기 정의

속성 창에서 이 데이터 생성기에 대해 입력 속성을 지정하려면 입력 값과 SqlDateTime 형식 간을 변환하는 형식 변환기를 제공해야 합니다.

SqlDateTime 형식 변환기 클래스를 만들려면

  1. 프로젝트 메뉴에서 클래스 추가를 클릭합니다.

    새 항목 추가 대화 상자가 나타납니다.

  2. 이름에 SqlDateTimeConverter를 입력합니다.

  3. 코드 창의 맨 위에서 클래스 선언 앞에 다음 코드 줄을 추가합니다.

    Imports System.ComponentModel
    Imports System.Data.SqlTypes
    Imports System.Globalization
    
    using System.ComponentModel;
    using System.Data.SqlTypes;
    using System.Globalization;
    
  4. 클래스가 TypeConverter에서 상속하도록 지정합니다.

    Public Class SqlDateTimeConverter
        Inherits TypeConverter
    
    End Class
    
    public class SqlDateTimeConverter: TypeConverter
    {
    }
    
  5. 클래스 선언 내에 클래스 생성자를 추가합니다. Visual Basic에서 형식 변환기 클래스를 작성하는 경우에는 6단계로 건너뜁니다.

    public SqlDateTimeConverter()
    {
    }
    
  6. 형식 생성자 다음에 이 형식 변환기를 사용하여 특정 변환을 수행할 수 있는지 여부를 확인하는 메서드를 추가합니다.

    Public Overrides Function CanConvertFrom(ByVal context As ITypeDescriptorContext, ByVal sourceType As Type) As Boolean
        Dim result As Boolean
        result = False
        If (sourceType Is GetType(System.String)) Then
            result = True
        Else
            result = MyBase.CanConvertFrom(context, sourceType)
        End If
        Return result
    End Function 
    
    Public Overrides Function CanConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal destinationType As System.Type) As Boolean
        If (destinationType Is GetType(System.String)) Then
            Return True
        End If
        Return MyBase.CanConvertTo(context, destinationType)
    End Function
    
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        bool result = false;
        if (sourceType == typeof(string))
        {
            result = true;
        }
        else
        {
            result = base.CanConvertFrom(context, sourceType);
        }
        return result;
    }
    
    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
    {
        if (destinationType == typeof(string))
        {
            return true;
        }
        return base.CanConvertTo(context, destinationType);
    }
    
  7. 마지막으로 변환기 메서드를 추가합니다.

    Public Overrides Function ConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object) As Object
        Dim dateTimeString As String
        dateTimeString = value.ToString
        If (dateTimeString.Length > 0) Then
            Dim dateTime As Date
            dateTime = Date.Parse(dateTimeString, culture)
            Return New SqlDateTime(dateTime)
        End If
        Return MyBase.ConvertFrom(context, culture, value)
    End Function
    
    Public Overrides Function ConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object, ByVal destinationType As System.Type) As Object
        If (destinationType Is GetType(System.String)) Then
            Dim dateTime As Date
            dateTime = CType(value, SqlDateTime).Value
            Return dateTime.ToString(culture)
        End If
        Return MyBase.ConvertTo(context, culture, value, destinationType)
    End Function
    
            public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
            {
                string dateTimeString = value as string;
                if (dateTimeString != null)
                {
                    DateTime dateTime = DateTime.Parse(dateTimeString, culture);
                    return new SqlDateTime(dateTime);
                }
                return base.ConvertFrom(context, culture, value);
            }
    
            public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
            {
                if (destinationType == typeof(string))
                {
                    DateTime dateTime = ((SqlDateTime)value).Value;
                    return dateTime.ToString(culture);
                }
                return base.ConvertTo(context, culture, value, destinationType);
            }
    
  8. 파일 메뉴에서 모두 저장을 클릭합니다.

생성기 서명

모든 사용자 지정 데이터 생성기는 등록하기 전에 강력한 이름으로 서명되어야 합니다.

강력한 이름을 사용하여 생성기에 서명하려면

  1. 프로젝트 메뉴에서 GeneratorDateRanges 속성을 클릭하여 프로젝트 속성을 엽니다.

  2. 서명 탭에서 어셈블리 서명 확인란을 선택합니다.

  3. 강력한 이름 키 파일 선택 상자에서 **<새로 만들기...>**를 클릭합니다.

  4. 키 파일 이름 상자에 GeneratorDateRangesKey를 입력하고 암호를 입력 및 확인한 다음 확인을 클릭합니다.

    솔루션을 빌드할 때 이 키 파일이 어셈블리에 서명하는 데 사용됩니다.

  5. 파일 메뉴에서 모두 저장을 클릭합니다.

  6. 빌드 메뉴에서 솔루션 빌드를 클릭합니다.

    이제 데이터 생성기가 빌드되었습니다. 다음에는 생성기를 데이터 생성 계획에서 사용할 수 있도록 컴퓨터에 등록해야 합니다.

생성기 등록

어셈블리 서명 및 컴파일을 마친 후 다음 단계에서는 생성기 어셈블리를 등록하기 쉽도록 프로젝트에서 생성된 버전, 문화권, PublicKeyToken 등의 어셈블리 정보를 수집합니다.

어셈블리 정보를 수집하려면

  1. 보기 메뉴에서 다른 창, 명령 창을 차례로 클릭하여 명령 창을 엽니다.

  2. 명령 창에서 다음 코드를 입력합니다. FilePath 대신 컴파일된 .dll 파일의 경로 및 파일 이름을 입력합니다. 이때 경로 및 파일 이름을 따옴표로 묶습니다.

    참고

    기본적으로 컴파일된 .dll 파일의 경로는 SampleGenerator\bin\Debug입니다.

    ? System.Reflection.Assembly.LoadFrom("FilePath").FullName
    
    ? System.Reflection.Assembly.LoadFrom(@"FilePath").FullName
    
  3. Enter 키를 누릅니다. 이 줄은 특정 PublicKeyToken이 포함된 다음과 유사합니다.

    " GeneratorDateRanges, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn"
    

    이 어셈블리 정보를 적어 두거나 복사합니다. 이 정보는 다음 절차에서 사용됩니다.

    다음으로 이전 절차에서 수집한 어셈블리 정보를 사용하여 XML 파일을 만듭니다.

XML 파일을 만들려면

  1. 솔루션 탐색기에서 GeneratorDateRanges 프로젝트를 선택합니다.

  2. 프로젝트 메뉴에서 새 항목 추가를 선택합니다.

  3. 템플릿 창에서 XML 파일 항목을 찾아 선택합니다.

  4. 이름 텍스트 상자에 GeneratorDateRanges.Extensions.xml을 입력한 다음 추가 단추를 클릭합니다.

    솔루션 탐색기에서 해당 프로젝트에 GeneratorDateRanges.Extensions.xml 파일이 추가됩니다.

    참고

    dll 이름(이 경우 "GeneratorDateRanges" 뒤에 ".Extensions.xml"이 붙은 이름)을 사용해야 어셈블리가 제대로 등록됩니다.

  5. GeneratorDateRanges.Extensions.xml 파일을 열고 다음 XML과 일치하도록 업데이트합니다. 이전 절차에서 검색한 어셈블리의 버전, 문화권 및 PublicKeyToken을 바꿉니다.

    참고

    확장 형식에서는 정규화된 클래스 이름을 사용해야 합니다. 이 경우에 확장 형식은 "GeneratorDateRanges.GeneratorDateRanges"입니다.

    <?xml version="1.0" encoding="utf-8"?>
    <extensions assembly=""
                version="1" xmlns="urn:Microsoft.Data.Schema.Extensions"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="urn:Microsoft.Data.Schema.Extensions 
    
      Microsoft.Data.Schema.Extensions.xsd"> <extension type="GeneratorDateRanges.GeneratorDateRanges" assembly=" GeneratorDateRanges, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn" enabled="true"/>
    
    </extensions>
    
  6. 파일 메뉴에서 모두 저장을 클릭합니다.

다음에는 어셈블리와 XML 파일을 Extensions 디렉터리에 복사합니다. Visual Studio Premium은 시작 시 %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions 디렉터리 및 하위 디렉터리에 있는 모든 확장을 확인하여 세션에서 사용할 수 있도록 등록합니다.

어셈블리와 XML 파일을 Extensions 디렉터리에 복사하고 등록하려면

  1. %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\ 디렉터리에 CustomGenerators라는 폴더를 만듭니다.

  2. ProjectFolder\GeneratorDateRanges\GeneratorDateRanges\bin\Debug\ 디렉터리에 있는 GeneratorDateRanges.dll 어셈블리 파일을 앞에서 만든 %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators 디렉터리에 복사합니다.

  3. ProjectFolder\GeneratorDateRanges\GeneratorDateRanges\ 디렉터리에 있는 GeneratorDateRanges.Extensions.xml 파일을 앞에서 만든 %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators 디렉터리에 복사합니다.

    참고

    %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions 디렉터리의 폴더에 확장 어셈블리를 저장하는 것이 좋습니다. 이렇게 하면 제품에 포함된 확장과 사용자 지정 확장을 식별하는 데 도움이 됩니다. 확장을 범주별 폴더로 구성하는 것도 좋습니다.

DateRanges 생성기 테스트

DateRanges 날짜 생성기를 만든 후에는 Visual Studio의 새 인스턴스를 시작해야 합니다. Visual Studio에서는 시작 시 %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators 디렉터리에 추가된 GeneratorDateRanges 어셈블리를 등록합니다.

다음에는 DateRanges 날짜 생성기가 올바르게 작동하는지 확인할 수 있는 데이터베이스 프로젝트를 만듭니다.

데이터베이스 프로젝트를 만들려면

  1. Visual Studio의 새 인스턴스를 시작합니다. 그러면 GeneratorDateRanges.dll 어셈블리가 인식되고 등록됩니다.

  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

    새 프로젝트 대화 상자가 나타납니다.

  3. 설치된 템플릿 목록에서 데이터베이스를 확장하고 SQL Server를 클릭합니다.

  4. 템플릿에서 SQL Server 2008 마법사를 클릭합니다.

  5. 이름에 SampleGeneratorDB를 입력합니다.

    참고

    연습: 사용자 지정 데이터 생성기 만들기의 모든 단계를 완료하여 SampleGeneratorDB 프로젝트를 이미 만든 경우에는 다음 절차인 데이터베이스 프로젝트에 테이블을 추가하려면으로 이동할 수 있습니다.

  6. 솔루션용 디렉터리 만들기 확인란을 선택합니다.

  7. 위치, 솔루션 이름소스 제어에 추가에 대해 기본값을 적용한 다음 확인을 클릭합니다.

  8. 마침을 클릭합니다. 마법사가 완료되면 마침을 다시 클릭합니다.

    새 데이터베이스 프로젝트 SampleGeneratorDB가 솔루션 탐색기에 나타납니다.

  9. 보기 메뉴에서 데이터베이스 스키마 뷰를 클릭합니다.

    스키마 뷰가 아직 표시되지 않은 경우 표시됩니다.

    다음에는 DateRange SQL 형식의 열 하나만 있는 간단한 테이블을 프로젝트에 추가합니다.

데이터베이스 프로젝트에 테이블을 추가하려면

  1. 스키마 뷰에서 SampleGeneratorDB 노드, 스키마 노드, dbo 노드를 차례로 확장하고 테이블 노드를 클릭합니다.

  2. 프로젝트 메뉴에서 새 항목 추가를 클릭합니다.

    참고

    스키마 뷰에서 SampleGeneratorDB 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 테이블을 클릭할 수도 있습니다.

  3. 템플릿에서 테이블을 클릭합니다.

    참고

    범주 목록에서 테이블 및 뷰를 클릭하면 테이블의 템플릿을 보다 쉽게 찾을 수 있습니다.

  4. 이름에서 새 테이블에 지정할 이름으로 TableDates를 입력합니다.

  5. 추가를 클릭하여 데이터베이스 프로젝트에 테이블을 추가합니다.

    솔루션 탐색기의 사용자 데이터베이스 프로젝트에 해당 테이블에 대한 새 파일이 표시됩니다. 스키마 뷰에는 새 테이블 개체가 표시됩니다. Transact-SQL 편집기가 나타나고 새 테이블에 대한 정의가 표시됩니다.

  6. Transact-SQL 편집기에서 다음 예제와 일치하도록 테이블 정의를 수정합니다.

    CREATE TABLE [dbo].[TableDates]
    (
    dates DateTime
    )
    
  7. 파일 메뉴에서 TableDates.table.sql 저장을 클릭합니다.

테이블을 추가한 후에는 사용된 날짜 범위가 유효한지 확인하기 위한 CHECK 제약 조건을 추가합니다.

참고

사용자 지정 DateRanges 데이터 생성기의 속성 값에 해당 날짜 범위를 입력하는 단계는 다른 절차에서 다룹니다. 자세한 내용은 데이터 생성 계획 만들기 및 구성을 참조하십시오.

테이블에 CHECK 제약 조건을 추가하려면

  1. 스키마 뷰에서 Tables 노드를 확장하고 TableDates 테이블을 클릭합니다.

  2. 프로젝트 메뉴에서 새 항목 추가를 클릭합니다.

  3. 템플릿에서 CHECK 제약 조건을 클릭합니다.

    참고

    스키마 뷰에서 Dates 테이블을 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 CHECK 제약 조건을 클릭할 수도 있습니다.

  4. 이름에서 새 CHECK 제약 조건에 지정할 이름으로 CheckConstraintDateRanges를 입력합니다.

  5. 추가를 클릭하여 데이터베이스 프로젝트에 CHECK 제약 조건을 추가합니다.

    솔루션 탐색기의 해당 데이터베이스 프로젝트에 CHECK 제약 조건에 대한 새 파일이 표시됩니다. 스키마 뷰에는 새 CHECK 제약 조건 개체가 표시됩니다. Transact-SQL 편집기가 나타나고 새 CHECK 제약 조건에 대한 정의가 표시됩니다.

  6. Transact-SQL 편집기에서 다음 예제와 일치하도록 CHECK 제약 조건을 수정합니다.

    ALTER TABLE [dbo].[TableDates]
    ADD CONSTRAINT [CheckConstraintDateRanges] 
    CHECK ((dates BETWEEN '1/1/1800' AND '1/1/1900')OR(dates BETWEEN '1/1/1979' AND '12/31/2008'))
    
  7. 파일 메뉴에서 Dates.CheckConstraintDateRanges.chkconst.sql 저장을 클릭합니다.

    참고

    연습: 사용자 지정 데이터 생성기 만들기의 모든 단계를 이미 완료한 경우 데이터 생성 계획 만들기 및 구성 단원으로 이동할 수 있습니다.

테이블과 CHECK 제약 조건을 추가한 후에는 데이터베이스를 배포용으로 구성할 수 있습니다.

프로젝트 배포 설정을 구성하려면

  1. 솔루션 탐색기에서 SampleGeneratorDB(솔루션이 아닌 프로젝트)를 클릭합니다.

  2. 프로젝트 메뉴에서 SampleGeneratorDB 속성을 클릭합니다.

    프로젝트 속성 창이 나타납니다.

    참고

    솔루션 탐색기에서 SampleGeneratorDB를 마우스 오른쪽 단추로 클릭하고 속성을 클릭할 수도 있습니다.

  3. 배포 탭을 클릭합니다.

  4. 배포 작업에서 배포 스크립트(.sql)를 만들고 데이터베이스에 배포를 클릭합니다.

  5. 편집 단추를 클릭하여 대상 연결을 지정합니다.

  6. SampleGeneratorDB 데이터베이스를 배포할 데이터베이스 서버에 연결하기 위한 정보를 지정합니다.

  7. 데이터베이스 이름 선택 또는 입력에 SampleGeneratorDB를 입력합니다.

  8. 확인을 클릭합니다.

    대상 연결이 연결 문자열로 채워집니다. 또한 대상 데이터베이스 이름SampleGeneratorDB로 설정됩니다.

  9. 다른 옵션에 대해 기본값을 적용합니다.

  10. 파일 메뉴에서 선택한 항목 저장을 클릭합니다.

    프로젝트 빌드 설정이 저장됩니다.

    다음에는 데이터베이스 프로젝트를 빌드합니다.

데이터베이스 프로젝트를 빌드하려면

  • 빌드 메뉴에서 솔루션 빌드를 클릭합니다.

    데이터베이스 프로젝트가 빌드됩니다. 성공하면 상태 표시줄에 "빌드했습니다."라는 메시지가 나타나고 출력 창에 빌드 결과가 표시됩니다.

    다음에는 데이터베이스 프로젝트를 배포합니다.

데이터베이스 프로젝트를 데이터베이스 서버에 배포하려면

  1. 솔루션 탐색기에서 SampleGeneratorDB(솔루션이 아닌 프로젝트)를 클릭합니다.

  2. 빌드 메뉴에서 SampleGeneratorDB 배포를 클릭합니다.

    데이터베이스 프로젝트가 빌드 구성에서 지정한 연결을 사용하여 배포됩니다. 성공하면 상태 표시줄과 출력 창에 "배포되었습니다."라는 메시지가 나타납니다.

데이터 생성 계획 만들기 및 구성

다음에는 데이터 생성 계획을 만듭니다. 데이터 생성 계획에는 데이터로 채우려는 테이블과 열에 대한 정보가 있습니다. 자세한 내용은 방법: 데이터 생성 계획 만들기를 참조하십시오.

데이터 생성 계획을 만들고 구성하려면

  1. 솔루션 탐색기에서 데이터 생성 계획 노드를 선택합니다.

  2. 프로젝트 메뉴에서 새 항목 추가를 클릭합니다.

  3. 범주 창에서 데이터 생성 계획을 클릭합니다.

  4. 템플릿 창에서 데이터 생성 계획을 클릭합니다.

  5. 이름 텍스트 상자에 SampleGenerator.dgen을 입력합니다.

  6. 추가를 클릭합니다.

    데이터 생성 계획이 만들어집니다. 데이터 생성 계획과 데이터 생성 미리 보기 창이 나타납니다. 데이터 생성 계획 창은 가로로 두 개의 창으로 분할되어 있습니다. 위쪽 창에는 데이터베이스 프로젝트 스키마에 정의된 테이블(이 경우 dbo.TableDates 테이블)이 나열되고, 아래쪽 창에는 위쪽 창에 강조 표시되어 있는 테이블에 대한 열 정보(이 경우 address 열)가 표시됩니다.

    참고

    데이터 생성 미리 보기 창이 열리지 않는 경우 데이터 메뉴를 열고 데이터 생성기를 가리킨 다음 데이터 생성 미리 보기를 클릭하여 이 창을 열 수 있습니다. 기본적으로 데이터 생성 미리 보기 창은 데이터 생성 계획 창의 맨 아래에 도킹되어 탭으로 표시됩니다. 보기를 확장하려면 창을 클릭한 다음 메뉴에서 탭 문서를 클릭합니다. 제목 표시줄을 마우스 오른쪽 단추로 클릭한 다음 탭 문서로 도킹을 클릭할 수도 있습니다.

  7. SampleGenerator.dgen 디자이너에서 dbo.TableDates 테이블과 dates 열이 모두 검사되었는지 확인합니다.

  8. 테이블에서 삽입할 행 아래의 값을 500으로 변경합니다.

  9. SampleGenerator.dgen 디자이너에서 dates 열을 선택하고 생성기 드롭다운 메뉴를 클릭하여 GeneratorDateRanges를 선택합니다.

  10. dates 열이 선택된 상태로 속성 창에서 다음과 같이 두 날짜 범위 입력에 대한 값을 입력합니다.

    • Range1Max - 2008-12-31 오전 12:00:00

    • Range1Min - 1979-1-1 오전 12:00:00

    • Range2Max - 1900-1-1 오전 12:00:00

    • Range2Min - 1800-1-1 오전 12:00:00

    이제 사용자 지정 주소 생성기가 올바르게 구성되었습니다.

  11. 파일 메뉴에서 모두 저장을 클릭합니다.

데이터 생성 계획을 실행하여 날짜 범위 데이터 생성

마지막으로, 데이터 생성 계획을 실행하여 사용자 지정 날짜 범위 데이터 생성기의 동작을 확인합니다.

데이터 생성 계획을 실행하려면

  1. 솔루션 탐색기에서 SampleGenerator.dgen을 클릭합니다.

    참고

    데이터 생성 계획이 열려 있어야 합니다. 계획이 열려 있지 않으면 먼저 계획을 엽니다.

  2. 데이터 메뉴에서 데이터 생성기를 가리킨 다음 데이터 생성을 클릭합니다.

    데이터베이스에 연결 대화 상자가 나타납니다.

  3. 데이터 생성 연결 정보 목록에서 SampleGeneratorDB 데이터베이스를 클릭하고 확인을 클릭합니다.

  4. 새 행을 삽입하기 전에 테이블 내용을 지우라는 메시지가 표시되면 를 클릭합니다.

    데이터가 생성됩니다. 채우기 창에서 상태 열이 데이터 생성 상태로 업데이트됩니다. 상태 표시줄에 모든 테이블에 대한 데이터 생성 요약이 표시됩니다.

  5. (선택 사항) 다른 도구를 사용하여 데이터베이스에 로그온합니다. 이 단계에서 Visual Studio Premium에 제공된 Transact-SQL 편집기를 사용할 수 있습니다. 자세한 내용은 Microsoft 웹사이트의 Transact-SQL 편집기를 사용하여 데이터베이스 스크립트 및 개체 편집을 참조하십시오. 다음 쿼리를 실행하여 새 데이터를 표시합니다.

    use SampleGeneratorDB
    
    select * from dbo.TableDates
    

    결과 탭에 500개의 날짜 결과가 표시되어야 합니다.

  6. (선택 사항) 속성 창에서 Range1Max의 값을 3000-12-31 오전 12:00:00으로 변경하고 2-5단계를 반복하여 날짜 생성기를 다시 실행합니다.

    오류 목록 창에 CHECK 제약 조건 위반, 즉 변경되는 날짜 범위가 허용 범위를 벗어남으로 인해 생성된 오류가 표시됩니다.

참고 항목

작업

연습: 사용자 지정 데이터 생성기 만들기

방법: 기능 확장 등록 및 관리

참조

Microsoft.Data.Schema.Tools.DataGenerator

개념

사용자 지정 데이터 생성기를 통해 특수 테스트 데이터 생성

데이터 생성기 확장성 개요

열의 데이터 생성 정보 지정

기타 리소스

기능 확장 문제 해결

변경 기록

날짜

변경 내용

이유

2010년 12월

고객 의견을 반영하여 코드 오류를 수정했습니다.

고객 의견