Compartir a través de


Tutorial: Crear un generador de datos personalizado para una restricción CHECK

Puede usar generadores de datos estándar para rellenar columnas con datos en Visual Studio Premium o Visual Studio Ultimate. Si la columna que desea rellenar tiene una restricción CHECK definida, los datos con los que se va a rellenar la columna deben satisfacer esa restricción. Los generadores de datos estándar pueden generar datos que satisfacen muchas restricciones CHECK. Por ejemplo, si tiene una restricción CHECK que requiere que una fecha esté dentro de un intervalo determinado, puede usar el generador DateTime estándar y establecer las propiedades Mín y Máx de forma que satisfagan la restricción.

Sin embargo, los generadores de datos estándar no pueden satisfacer todas las restricciones CHECK. Por ejemplo, si tiene una restricción CHECK que requiere que una fecha esté en uno de dos intervalos distintos, no puede usar el generador DateTime estándar. En este tutorial va a crear un generador de datos personalizado que puede satisfacer una restricción de este tipo. El generador acepta dos intervalos como entrada y genera una fecha aleatoria que está dentro de uno de los intervalos.

En este tutorial realizará las tareas siguientes:

  • Crear una clase que herede de Generator.

  • Crear propiedades de entrada que permitan al usuario especificar los dos intervalos de fechas.

  • Crear una propiedad de salida para usarla como salida del generador.

  • Reemplazar el método OnInitialize para establecer el valor de inicialización de los objetos Random y hacer que el generador sea determinista.

  • Reemplazar el método OnGenerateNextValues para generar los datos.

  • Firmar el generador con un nombre seguro.

Requisitos previos

Para completar este tutorial debe haber instalado Visual Studio Premium o Visual Studio Ultimate.

Crear la clase de generador de datos personalizado

Para empezar a crear el generador de datos personalizado, cree una biblioteca de clases.

Para crear la clase de generador de datos personalizado

  1. En Visual Studio, cree un proyecto de Biblioteca de clases en el lenguaje que prefiera y asígnele el nombre GeneratorDateRanges.

  2. Haga clic en la opción Agregar referencia del menú Proyecto.

  3. Seleccione la pestaña .NET.

  4. En la columna Nombre de componente, busque los componentes siguientes:

    • [Microsoft.Data.Schema]

    • [Microsoft.Data.Schema.Sql]

    • [Microsoft.Data.Schema.Tools]

    SugerenciaSugerencia

    Presione CTRL haciendo clic para seleccionar varios componentes.

  5. Haga clic en Aceptar una vez seleccionados todos los componentes necesarios.

    Las referencias seleccionadas aparecerán bajo el nodo Referencias del proyecto en el Explorador de soluciones.

  6. (Opcional, sólo en Visual Basic) En el Explorador de soluciones, haga clic en Mostrar todos los archivos y expanda el nodo Referencias para comprobar la nueva referencia.

  7. Abra el archivo Class1 y a continuación, en la parte superior de la ventana Código, antes de la declaración de clase, agregue las siguientes líneas de código:

    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. Cambie el nombre de la clase de Class1 a GeneratorDateRanges y especifique que la clase hereda de Generator.

    Nota de precauciónPrecaución

    De manera predeterminada, el nombre que asigne a la clase es el que aparecerá en la lista de la columna Generador en la ventana Detalles de columna. Debe especificar un nombre que no entre en conflicto con el nombre de un generador estándar o de otro generador personalizado.

    Public Class GeneratorDateRanges
        Inherits Generator
    
    End Class
    
    public class GeneratorDateRanges: Generator
    {
    }
    
  9. Agregue DatabaseSchemaProviderCompatibilityAttribute, como se muestra en el ejemplo siguiente:

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

    Para obtener más información sobre el atributo de compatibilidad de extensión, vea Extender las características de base de datos de Visual Studio.

  10. En el menú Archivo, haga clic en Guardar todo.

Agregar las propiedades de entrada

Este generador de datos personalizado acepta dos intervalos de fechas como entrada. Para especificar cada intervalo, el usuario debe especificar las fechas límite. Por tanto, debe crear cuatro propiedades de entrada en total: dos fechas iniciales y dos fechas finales.

Para agregar las propiedades de entrada

  1. Cree cuatro variables miembro para las fechas límite de los dos intervalos de fechas:

    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. Cree cuatro propiedades para establecer las fechas límite de los dos intervalos de fechas. Las propiedades deben tener el atributo InputAttribute para identificarse como propiedades de entrada.

    Nota

    Para especificar las propiedades de entrada para este generador de datos en la ventana Propiedades, debe proporcionar un convertidor de tipos que convierta los valores de entrada al tipo SqlDateTime y viceversa. Para ello, agregará una clase auxiliar SqlDateTimeConverter más adelante en este tutorial.

    <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. En el menú Archivo, haga clic en Guardar todo.

Agregar la propiedad de salida

Este generador de datos personalizado devuelve una fecha aleatoria como salida. Por tanto, debe crear una propiedad de salida.

Para agregar la propiedad de salida

  1. Cree una variable miembro para la fecha aleatoria que constituye la salida:

    Dim randomDateValue As SqlDateTime
    
    SqlDateTime randomDateValue;
    
  2. Cree una propiedad para devolver la fecha aleatoria como salida. La propiedad debe tener el atributo OutputAttribute para identificarse como una propiedad de salida.

    <Output()> _
    Public ReadOnly Property RandomDate() As SqlDateTime
        Get
            Return randomDateValue
        End Get
    End Property
    
    [Output]
    public SqlDateTime RandomDate
    {
        get {return randomDateValue;}
    }
    
  3. En el menú Archivo, haga clic en Guardar todo.

Reemplazar el método OnInitialize

Los datos aleatorios pueden generarse de forma determinista o no determinista. En la generación de datos determinista se repiten los mismos datos cada vez que se usa el mismo valor de inicialización. Todos los generadores de datos tienen una propiedad Seed cuyo valor puede ser establecido por el usuario. Puede reemplazar el método OnInitialize para establecer el valor de inicialización de los objetos Random y hacer que el generador sea determinista.

Para reemplazar el método OnInitialize

  1. Cree dos variables miembro para generar números aleatorios, como se indica en el siguiente ejemplo. Una variable genera una fecha aleatoria. La otra variable elige aleatoriamente entre los dos intervalos de fechas posibles.

    Dim random As Random
    Dim randomRange As Random
    
    Random random;
    Random randomRange;
    
  2. Reemplace el método 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. En el menú Archivo, haga clic en Guardar todo.

Reemplazar el método OnGenerateNextValues

Visual Studio Premium llama al método OnGenerateNextValues del generador para crear los datos que necesita. Debe invalidar este método para proporcionar la lógica que genere la fecha aleatoria para la propiedad de salida.

Para reemplazar el método OnGenerateNextValues

  1. Reemplace el método OnGenerateNextValues, como se muestra en el ejemplo siguiente:

    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. En el menú Archivo, haga clic en Guardar todo.

Definir el convertidor de tipos

Para especificar las propiedades de entrada para este generador de datos en la ventana Propiedades, debe proporcionar un convertidor de tipos que convierta los valores de entrada al tipo SqlDateTime y viceversa.

Para crear la clase de convertidor de tipos SqlDateTime

  1. En el menú Proyecto, haga clic en Agregar clase.

    Aparecerá el cuadro de diálogo Agregar nuevo elemento.

  2. En Nombre, escriba SqlDateTimeConverter.

  3. En la parte superior de la ventana Código, agregue las siguientes líneas de código antes de la declaración de clase.

    Imports System.ComponentModel
    Imports System.Data.SqlTypes
    Imports System.Globalization
    
    using System.ComponentModel;
    using System.Data.SqlTypes;
    using System.Globalization;
    
  4. Especifique que su clase hereda de TypeConverter:

    Public Class SqlDateTimeConverter
        Inherits TypeConverter
    
    End Class
    
    public class SqlDateTimeConverter: TypeConverter
    {
    }
    
  5. En la declaración de clase, agregue el constructor de clase. Si está escribiendo la clase del convertidor de tipos en Visual Basic, vaya al paso 6.

    public SqlDateTimeConverter()
    {
    }
    
  6. A continuación del constructor de clase, agregue un método que compruebe si es posible que este convertidor de tipos realice una conversión determinada:

    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. Por último, agregue los métodos del convertidor:

    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. En el menú Archivo, haga clic en Guardar todo.

Firmar el generador

Todos los generadores de datos personalizados deben firmarse con un nombre seguro antes de registrarse.

Para firmar el generador con un nombre seguro

  1. En el menú Proyecto, haga clic en Propiedades de GeneratorDateRanges para abrir las propiedades del proyecto.

  2. En la ficha Firma, active la casilla Firmar el ensamblado.

  3. En el cuadro Elija un archivo de clave de nombre seguro, haga clic en <Nuevo...>.

  4. En el cuadro Nombre del archivo de clave, escriba GeneratorDateRangesKey, escriba y confirme una contraseña y, a continuación, haga clic en Aceptar.

    Al generar la solución, se usa el archivo de clave para firmar el ensamblado.

  5. En el menú Archivo, haga clic en Guardar todo.

  6. En el menú Generar, haga clic en Generar solución.

    Se crea el generador de datos. A continuación debe registrarlo en su equipo para poder usarlo en los planes de generación de datos.

Registrar el generador

Una vez firmado y compilado el ensamblado, el paso siguiente consiste en recopilar la información del ensamblado generada en el proyecto, incluidas la versión, referencia cultural y PublicKeyToken, para facilitar el registro del ensamblado del generador.

Para recopilar información del ensamblado

  1. En el menú Ver, haga clic en Otras ventanas y, a continuación, haga clic en Ventana Comandos para abrir la ventana Comandos.

  2. En la ventana Comando, escriba el código siguiente. En FilePath, sustituya la ruta de acceso y el nombre de archivo por la ruta y el nombre de su archivo .dll compilado. Debe escribir la ruta de acceso y el nombre de archivo entre comillas.

    Nota

    De forma predeterminada, la ruta de acceso del archivo .dll compilado es SampleGenerator\bin\Debug.

    ? System.Reflection.Assembly.LoadFrom("FilePath").FullName
    
    ? System.Reflection.Assembly.LoadFrom(@"FilePath").FullName
    
  3. Presione Entrar. La línea debe tener un aspecto similar al siguiente con el PublicKeyToken concreto:

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

    Anote o copie esta información de ensamblado; se usará en el procedimiento siguiente.

    A continuación, creará un archivo XML usando la información del ensamblado que recopiló en el procedimiento anterior.

Para crear el archivo XML

  1. En el Explorador de soluciones, seleccione el proyecto GeneratorDateRanges.

  2. En el menú Proyecto, seleccione Agregar nuevo elemento.

  3. En el recuadro Plantillas, busque y seleccione el elemento Archivo XML.

  4. En el cuadro de texto Nombre, escriba GeneratorDateRanges.Extensions.xml y haga clic en el botón Agregar.

    El archivo GeneratorDateRanges.Extensions.xml se agrega al proyecto en el Explorador de soluciones.

    Nota

    Debe usar el nombre de su dll (en este caso, "GeneratorDateRanges" seguido de ".Extensions .xml") para que el ensamblado se registre correctamente.

  5. Abra el archivo GeneratorDateRanges.Extensions.xml y actualícelo para que coincida con el XML siguiente. Reemplace la versión, referencia cultural y PublicKeyToken del ensamblado que recuperó en el procedimiento anterior.

    Nota

    El tipo de extensión debe usar el nombre completo de la clase. En este caso: tipo de extensión = "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. En el menú Archivo, haga clic en Guardar todo.

A continuación, copiará el ensamblado y el archivo XML en el directorio Extensions. Cuando Visual Studio Premium se inicie, identificará todas las extensiones del directorio %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions y sus subdirectorios, y las registrará para su uso en la sesión.

Para copiar y registrar el ensamblado y el archivo XML en el directorio Extensions

  1. Cree una carpeta denominada CustomGenerators en el directorio %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\.

  2. Copie el archivo de ensamblado GeneratorDateRanges.dll del directorio ProjectFolder\GeneratorDateRanges\GeneratorDateRanges\bin\Debug\ al directorio %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators que creó.

  3. Copie el archivo GeneratorDateRanges.Extensions.xml del directorio ProjectFolder\GeneratorDateRanges\GeneratorDateRanges\ al directorio %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators que creó.

    Nota

    Se recomienda colocar los ensamblados de extensión en una carpeta del directorio %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions. Esto le ayudará a identificar qué extensiones se incluían con el producto y cuáles son creaciones personalizadas suyas. También debe considerar la posibilidad de organizar sus extensiones en carpetas específicas de la categoría.

Probar el generador de intervalos de fechas

Ahora que ha creado el generador de datos DateRanges, debe iniciar una nueva instancia de Visual Studio. Cuando Visual Studio se inicie, registrará el ensamblado GeneratorDateRanges que agregó al directorio %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators.

Después, creará un proyecto de base de datos en el que puede comprobar que el generador de datos DateRanges funciona correctamente.

Para crear el proyecto de base de datos

  1. Inicie una nueva instancia de Visual Studio, que reconocerá el ensamblado GeneratorDateRanges.dll y lo registrará.

  2. En el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto.

    Aparecerá el cuadro de diálogo Nuevo proyecto.

  3. En la lista de Plantillas instaladas, expanda Base de datos y haga clic en SQL Server.

  4. En Plantillas, haga clic en Asistente de SQL Server 2008.

  5. En Nombre, escriba SampleGeneratorDB.

    Nota

    Si ya ha completado todos los pasos de Tutorial: Crear un generador de datos personalizado, ya ha creado el proyecto SampleGeneratorDB y puede ir al procedimiento siguiente, Para agregar una tabla al proyecto de base de datos.

  6. Active la casilla Crear directorio para la solución.

  7. Acepte los valores predeterminados para Ubicación, Nombre de la solución y Agregar al control de código fuente y, a continuación, haga clic en Aceptar.

  8. Haga clic en Finalizar. Cuando el asistente haya finalizado, haga clic de nuevo en Finalizar.

    El nuevo proyecto de base de datos, SampleGeneratorDB, aparecerá en el Explorador de soluciones.

  9. En el menú Ver, haga clic en Vista de esquema.

    Si no estaba visible, aparece la Vista de esquema.

    Después, agregará una tabla sencilla al proyecto, con una única columna con un tipo SQL de DateRange.

Para agregar una tabla al proyecto de base de datos

  1. En Vista de esquema, expanda sucesivamente los nodos SampleGeneratorDB, Esquemas y dbo y, después, haga clic en el nodo Tablas.

  2. En el menú Proyecto, haga clic en Agregar nuevo elemento.

    Nota

    También puede hacer clic con el botón secundario en el proyecto SampleGeneratorDB en la Vista de esquema, elegir Agregar y hacer clic en Tabla.

  3. En Plantillas, haga clic en Tabla.

    Nota

    En la lista Categorías, puede hacer clic en Tablas y vistas para localizar con más facilidad la plantilla de una tabla.

  4. En Nombre, escriba TableDates como nombre de la nueva tabla.

  5. Haga clic en Agregar para agregar la tabla al proyecto de base de datos.

    El Explorador de soluciones muestra el nuevo archivo para la tabla en el proyecto de base de datos. La Vista de esquema muestra el nuevo objeto de tabla. Aparecerá el editor de Transact-SQL y se mostrará la definición de la nueva tabla.

  6. En el editor de Transact-SQL, modifique la definición de tabla para que coincida con el ejemplo siguiente:

    CREATE TABLE [dbo].[TableDates]
    (
    dates DateTime
    )
    
  7. En el menú Archivo, haga clic en Guardar TableDates.table.sql.

Con la tabla en su sitio, ahora agregará una restricción CHECK para comprobar que los intervalos de fechas usados son válidos.

Nota

Escribirá los intervalos de fechas correspondientes para los valores de las propiedades del generador de datos DateRanges personalizado en otro procedimiento. Para obtener más información, vea Crear y configurar el plan de generación de datos.

Para agregar una restricción CHECK a la tabla

  1. En Vista de esquema, expanda el nodo Tablas y haga clic en la tabla TableDates.

  2. En el menú Proyecto, haga clic en Agregar nuevo elemento.

  3. En Plantillas, haga clic en Restricción CHECK.

    Nota

    También puede hacer clic con el botón secundario en la tabla Dates en Vista de esquema, elegir Agregar y hacer clic en Restricción CHECK.

  4. En Nombre, escriba CheckConstraintDateRanges como nombre de la nueva restricción CHECK.

  5. Haga clic en Agregar para agregar la restricción CHECK a su proyecto de base de datos.

    El Explorador de soluciones muestra el nuevo archivo para la restricción CHECK en el proyecto de base de datos. La Vista de esquema muestra el nuevo objeto de restricción CHECK. Aparecerá el editor de Transact-SQL y se mostrará la definición de la nueva restricción CHECK.

  6. En el editor de Transact-SQL, modifique la restricción CHECK de forma que coincida con el ejemplo siguiente:

    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. En el menú Archivo, haga clic en Guardar Dates.CheckConstraintDateRanges.chkconst.sql.

    Nota

    Si ya ha completado todos los pasos de Tutorial: Crear un generador de datos personalizado, puede ir a la sección Crear y configurar el plan de generación de datos.

Con la tabla y la restricción CHECK en contexto, puede configurar ahora la base de datos para la implementación.

Para configurar las opciones de implementación del proyecto

  1. En el Explorador de soluciones, haga clic en SampleGeneratorDB (el proyecto, no la solución).

  2. En el menú Proyecto, haga clic en Propiedades de SampleGeneratorDB.

    Aparecerá la ventana Propiedades del proyecto.

    Nota

    También puede hacer clic con el botón secundario en SampleGeneratorDB en el Explorador de soluciones y, a continuación, hacer clic en Propiedades.

  3. Haga clic en la pestaña Implementar.

  4. En Implementar acción, haga clic en Crear un script de implementación (.sql) e implementar en la base de datos.

  5. Haga clic en el botón Editar para especificar la conexión de destino.

  6. Especifique la información para conectarse al servidor de bases de datos en el que desea implementar la base de datos SampleGeneratorDB.

  7. En Seleccione o escriba el nombre de la base de datos, escriba SampleGeneratorDB.

  8. Haga clic en Aceptar.

    En Conexión de destino se mostrará la cadena de conexión. Observe que el Nombre de la base de datos de destino es SampleGeneratorDB.

  9. Acepte los valores predeterminados para las demás opciones.

  10. En el menú Archivo, haga clic en Guardar los elementos seleccionados.

    Se guarda la configuración de generación del proyecto.

    A continuación compilará el proyecto de base de datos.

Para generar el proyecto de base de datos

  • En el menú Generar, haga clic en Generar solución.

    Se genera el proyecto de base de datos. Si finaliza correctamente, aparecerá el mensaje "Compilación correcta" en la barra de estado y los resultados de la compilación aparecerán en la Ventana de salida.

    A continuación implementará el proyecto de base de datos.

Para implementar el proyecto de base de datos en el servidor de bases de datos

  1. En el Explorador de soluciones, haga clic en SampleGeneratorDB (el proyecto, no la solución).

  2. En el menú Compilar, haga clic en Implementar SampleGeneratorDB.

    El proyecto de base de datos se implementa a través de la conexión especificada en la configuración de generación. Si finaliza correctamente, aparecerá el mensaje "Implementación correcta" en la barra de estado y en la Ventana de salida.

Crear y configurar el plan de generación de datos

El siguiente paso es crear el plan de generación de datos. El plan de generación de datos contiene información acerca de las tablas y columnas que se van a rellenar de datos. Para obtener más información, vea Cómo: Crear planes de generación de datos.

Para crear y configurar el plan de generación de datos

  1. En el Explorador de soluciones, seleccione el nodo Planes de generación de datos.

  2. En el menú Proyecto, haga clic en Agregar nuevo elemento.

  3. En el recuadro Categorías, haga clic en Plan de generación de datos.

  4. En el panel Plantillas, haga clic en Plan de generación de datos.

  5. En el cuadro de texto Nombre, escriba SampleGenerator.dgen.

  6. Haga clic en Agregar.

    Se crea el plan de generación de datos. Aparecen el plan de generación de datos y la ventana Vista previa de generación de datos. La ventana del plan de generación de datos está dividida horizontalmente en dos recuadros. El recuadro superior enumera las tablas que se definen en el esquema del proyecto de base de datos; en este caso, la tabla dbo.TableDates. El recuadro inferior muestra detalles de las columnas de la tabla que está resaltada en el recuadro superior; en este caso, la columna address.

    Nota

    Si la ventana Vista previa de generación de datos no está abierta, abra el menú Datos, elija Generador de datos y, a continuación, haga clic en Vista previa de generación de datos para abrirla. De forma predeterminada, la ventana Vista previa de generación de datos está acoplada y organizada por fichas en la parte inferior de la ventana del plan de generación de datos. Para expandir la vista, haga clic en la ventana y, a continuación, haga clic en Organización por fichas en el menú Ventana. También puede hacer clic con el botón secundario en la barra de título y, a continuación, hacer clic en Acoplar como organización por fichas.

  7. En el diseñador de SampleGenerator.dgen, compruebe que la tabla dbo.TableDates y la columna dates están activadas.

  8. En la tabla, cambie el valor de Filas para insertar a 500.

  9. En el diseñador de SampleGenerator.dgen, seleccione la columna dates y haga clic en el desplegable Generador para seleccionar GeneratorDateRanges.

  10. Con la columna dates seleccionada, en la ventana Propiedades, escriba valores para las dos entradas de intervalo de fechas:

    • Range1Max 12/31/2008 12:00:00 AM

    • Range1Min 1/1/1979 12:00:00 AM

    • Range2Max 1/1/1900 12:00:00 AM

    • Range2Min 1/1/1800 12:00 AM

    El generador de direcciones personalizado está configurado ahora correctamente.

  11. En el menú Archivo, haga clic en Guardar todo.

Ejecutar el plan de generación de datos para generar datos de intervalos de fechas

Por último, ejecutará el plan de generación de datos y verá su generador de datos de intervalos de fechas personalizado en acción.

Para ejecutar el plan para generar datos

  1. En el Explorador de soluciones, haga clic en SampleGenerator.dgen.

    Nota

    El plan de generación de datos debe estar abierto. Si el plan no está abierto, ábralo primero.

  2. En el menú Datos, elija Generador de datos y, a continuación, haga clic en Generar datos.

    Aparecerá el cuadro de diálogo Conectar a base de datos.

  3. En la lista Información de conexión de generación de datos, haga clic en la base de datos SampleGeneratorDB y, a continuación, haga clic en Aceptar.

  4. Haga clic en cuando se le pregunte si desea borrar el contenido de las tablas antes de insertar filas nuevas.

    Se generarán los datos. En la ventana Rellenado, la columna de estado se actualizará con el estado de la generación de datos. La barra de estado resume la generación de datos para todas las tablas.

  5. (Opcional) Utilice una herramienta diferente para iniciar sesión en la base de datos. Puede usar el editor de Transact-SQL que se proporciona en Visual Studio Premium para este paso. Para obtener más información, vea Editing Database Scripts and Objects with the Transact-SQL Editor en el sitio web de Microsoft. Para ver los datos nuevos, ejecute la consulta siguiente:

    use SampleGeneratorDB
    
    select * from dbo.TableDates
    

    La pestaña Resultados debe mostrar las 500 fechas resultantes.

  6. (Opcional) En la ventana Propiedades, cambie el valor de Range1Max a 12/31/3000 12:00:00 AM y ejecute de nuevo el generador de datos repitiendo los pasos 2 a 5.

    En la ventana Lista de errores, verá un error que se genera porque se está infringiendo la restricción CHECK, ya que el intervalo de fechas se está cambiando fuera del intervalo permitido.

Vea también

Tareas

Tutorial: Crear un generador de datos personalizado

Cómo: Registrar y administrar las extensiones de características

Referencia

Microsoft.Data.Schema.Tools.DataGenerator

Conceptos

Generar datos de pruebas especializados con un generador de datos personalizado

Descripción general de la extensibilidad del Generador de datos

Especificar detalles de la generación de datos para una columna

Otros recursos

Solucionar problemas de extensiones de características

Historial de cambios

Fecha

Historial

Motivo

Diciembre de 2010

Se ha corregido un error de código como respuesta a comentarios de los clientes.

Comentarios de los clientes.