sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo generar datos de prueba en SQL Server

Al probar la funcionalidad de su aplicación o el rendimiento de un procedimiento almacenado específico o una consulta ad-hoc en el entorno de desarrollo, necesita tener datos almacenados en sus bases de datos de desarrollo típicos o similares a los datos almacenados en las bases de datos de producción. Esto se debe a que el rendimiento de una consulta que procesa 50 registros será diferente del rendimiento de la misma consulta que procesa 50 millones de filas. Restaurar una copia de la base de datos de producción en el servidor de la base de datos de desarrollo con fines de prueba no siempre es una opción válida, debido a los datos críticos que se almacenan en estas bases de datos y no debe estar abierta para que la vean todos los empleados, a menos que esté desarrollando una nueva. aplicación y aún no hay una base de datos de producción.

La alternativa mejor y más segura es llenar las tablas de la base de datos de desarrollo con datos de prueba. La generación de datos de prueba es útil para probar el rendimiento de la aplicación o una nueva funcionalidad sin cambiar los datos de producción. No existe una única forma sencilla de generar datos de prueba que se adapten a todos los escenarios, especialmente cuando necesita generar una gran cantidad de datos para probar el rendimiento de consultas y transacciones complejas en las que debe cubrir todas las combinaciones posibles de casos de prueba.

Para llenar una tabla con una gran cantidad de datos, la forma más fácil es escribir un script simple que siga insertando registros idénticos en la tabla de la base de datos con la cantidad de duplicados que necesita. Pero el problema es que SQL Server Query Optimizer creará un plan diferente en la base de datos de desarrollo del que se creó en la base de datos de producción debido a la diferencia en la distribución de datos. Por ejemplo, el siguiente script llenará la tabla de Estudiantes con 100 000 registros de pruebas redundantes utilizando el Número GO. declaración:

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('John','Horold','2005-10-01','London, St15')

GO 25000

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Mike','Zikle','2005-06-08','London, St18')

GO 25000

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Faruk','Cedrik','2005-03-15','London, St24')

GO 25000

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Faisal','Ali','2005-12-05','London, St41')

GO 25000

Otra opción es generar datos aleatorios dependiendo del tipo de datos de cada columna. La columna ID con la propiedad IDENTITY generará automáticamente números de secuencia sin necesidad de ningún esfuerzo de codificación por su parte. Pero si planea generar calificaciones aleatorias para los estudiantes, puede aprovechar los beneficios de RAND() Función T-SQL y convierta el resultado como el tipo de datos numérico requerido. Por ejemplo, el siguiente script generará 100K calificaciones aleatorias para el estudiante entre 1 y 100 con tres tipos de datos diferentes:calificaciones ENTERAS, calificaciones REALES y calificaciones DECIMAL, con la capacidad de controlar los rangos de estos valores dependiendo de sus habilidades matemáticas y de programación. , como se muestra a continuación:

INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as int)) AS INT_Grage

GO 100000

INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as real)) AS Real_Grage

GO 100000

INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as decimal(6,2))) AS Decimal_Grage

GO 100000

La generación de nombres aleatorios también se puede lograr utilizando las bases de datos de prueba de Microsoft de AdventureWorks y Northwind. . Debe descargar estas bases de datos del sitio web de Microsoft, adjuntar estas bases de datos a su instancia de SQL Server y aprovechar los datos almacenados en estas bases de datos para generar nombres aleatorios en su base de datos de desarrollo. Por ejemplo, la tabla DimCustomer de la base de datos AdventureworksDW2016CTP3 contiene alrededor de 18 000 nombres, segundos nombres y apellidos que puede usar. También puede usar una declaración CROSS JOIN para generar una gran cantidad de combinaciones de estos nombres para exceder el valor de 18K. El siguiente script se puede utilizar para generar 100 000 nombres y apellidos:

INSERT INTO StudentsGrades (First_Name, Last_Name)

SELECT TOP 100000 N.[FirstName],cN.[LastName]

FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] N

CROSS JOIN AdventureworksDW2016CTP3.[dbo].[DimCustomer] cN

También se pueden generar direcciones de correo electrónico y fechas aleatorias a partir de las bases de datos de prueba de Microsoft. Por ejemplo, la columna Fecha de nacimiento y la columna Dirección de correo electrónico de la misma tabla DimCustomer pueden proporcionarnos fechas y direcciones de correo electrónico aleatorias. La siguiente secuencia de comandos se puede utilizar para generar una combinación de 100 000 fechas de nacimiento y direcciones de correo electrónico:

INSERT INTO StudentsGrades (BirthDate, EmailAddress)

SELECT TOP 100000 N.BirthDate,cN.EmailAddress

FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] N

CROSS JOIN AdventureworksDW2016CTP3.[dbo].[DimCustomer] c

Los valores aleatorios de la columna País también se pueden generar mediante la tabla Person.CountryRegion de la base de datos de prueba AdventureWorks2016CTP3. Puede proporcionarle más de 200 nombres y códigos de países de los que puede beneficiarse en su base de datos de desarrollo. Por ejemplo, puede tomarlo como una tabla de búsqueda para mapear entre el nombre y el código del país, como en el siguiente script:

INSERT INTO MappedConutries (CountryRegionCode, Name)

SELECT [CountryRegionCode],[Name]

FROM [AdventureWorks2016CTP3].[Person].[CountryRegion]

Then insert a random name or country code from these countries that has ID equal to a random ID generated between 1 and 238, as the script below:

INSERT INTO StudentsGrades (Country_Name) values

( (SELECT NAME FROM MappedConutries WHERE ID=CAST(RAND(CHECKSUM(NEWID()))*238 as int)))

GO 10000

Para generar valores de dirección aleatorios, puede aprovechar los datos almacenados en la persona. Tabla de direcciones de la base de datos de pruebas AdventureWorks2016CTP3. Contiene más de 19K direcciones diferentes con su ubicación espacial, que puedes usar fácilmente en tu base de datos de desarrollo y tomar una combinación aleatoria de estos valores, de la misma manera que hicimos en el ejemplo anterior. El siguiente script se puede usar fácilmente para generar 100 000 direcciones aleatorias a partir de la tabla Person.Address:

INSERT INTO StudentsGrades (STD_Address) values

( (SELECT NAME FROM [AdventureWorks2016CTP3].[Person].[Address] WHERE [AddressID]=CAST(RAND(CHECKSUM(NEWID()))*19614 as int)))

GO 100000

Para generar contraseñas aleatorias para usuarios específicos del sistema, podemos aprovechar los beneficios de CRYPT_GEN_RANDOM Función T-SQL. Esta función devuelve un número hexadecimal criptográfico generado aleatoriamente con una longitud de un número específico de bytes, generado por Crypto API (CAPI). El valor devuelto por esa función se puede convertir a un tipo de datos VARCHAR para tener contraseñas más significativas, como en el siguiente script, que genera 100 000 contraseñas aleatorias:

INSERT INTO SystemUsers (User_Password) SELECT CONVERT(varchar(20), CRYPT_GEN_RANDOM(20))

GO 100000

La generación de datos de prueba para llenar las tablas de la base de datos de desarrollo también se puede realizar fácilmente y sin perder tiempo escribiendo scripts para cada tipo de datos o utilizando herramientas de terceros. Puede encontrar varias herramientas en el mercado que se pueden utilizar para generar datos de prueba. Una de estas maravillosas herramientas es el dbForge Data Generator for SQL Server . Es una poderosa herramienta GUI para una generación rápida de datos de prueba significativos para las bases de datos de desarrollo. La herramienta de generación de datos dbForge incluye más de 200 generadores de datos predefinidos con opciones de configuración sensibles que le permiten emular datos aleatorios inteligentes de columnas. La herramienta también permite generar datos de demostración para bases de datos de SQL Server que ya están llenas de datos y crear sus propios generadores de datos de prueba personalizados. dbForge Data Generator for SQL Server puede ahorrarle el tiempo y el esfuerzo que dedica a la generación de datos de demostración al completar las tablas de SQL Server con millones de filas de datos de muestra que parecen datos reales. dbForge Data Generator for SQL Server ayuda a completar las tablas con los tipos de datos más utilizados, como los tipos de datos Básico, Comercial, Salud, TI, Ubicación, Pago y Persona. La siguiente figura muestra la facilidad con la que funciona esta herramienta:

Después de instalar la herramienta dbForge Data Generator for SQL Server y ejecutar esa herramienta, debe especificar el nombre del servidor de destino y el nombre de la base de datos en la ventana Conexión, como se muestra a continuación:

En la ventana Opciones, puede especificar el número de filas que se insertarán en su tabla y otras opciones diferentes que controlan los criterios de datos de prueba generados, como se muestra a continuación:

Después de personalizar las opciones para que se ajusten a sus requisitos de datos de prueba, haga clic en el y se mostrará una nueva ventana con una lista de todas las tablas y columnas en la base de datos seleccionada, preguntando usted elige qué tabla llenar con datos de prueba, como se muestra a continuación:

Simplemente elija la tabla que necesita para llenar con datos, y la herramienta le proporcionará automáticamente los datos sugeridos en la sección Vista previa en la parte inferior de la ventana y opciones personalizables para cada columna en esa tabla que puede personalizar fácilmente, como se muestra a continuación:

Por ejemplo, puede elegir entre los tipos de datos de generadores integrados que se pueden usar para generar los valores de la columna de ID como se describió anteriormente:

O personalice las características de los valores de esa columna de ID, como la Unicidad, Mín., Máx. y el Incremento de los valores generados, como se muestra a continuación:

Además, la columna First_Name se puede limitar para que sea masculino o femenino o una combinación de estos dos tipos. Además, puede controlar el porcentaje de NULL o valores vacíos dentro de esa columna, como se muestra a continuación:

La columna Fecha de nacimiento también se puede controlar especificando la categoría en la que se incluirán estos estudiantes, como Estudiantes, Adolescentes, Adultos o Jubilados, como se muestra a continuación:

También puede especificar el generador completamente descrito que se puede usar para generar los valores de la columna País como se muestra a continuación:

Y personalice la ecuación que se usará para generar los valores de la columna Dirección de correo electrónico de la siguiente manera:

Además de la complejidad de la ecuación personalizable, generamos los valores de la columna Contraseña, como se muestra a continuación:

Y finalmente, para mi ejemplo y no para esta herramienta mágica, los generadores y ecuaciones utilizados para generar los valores de la columna Dirección a continuación:

Después de este recorrido, puede imaginar cómo esta herramienta mágica lo ayudará a generar datos y simular escenarios en tiempo real para probar la funcionalidad de su aplicación. Instálelo y disfrute de los beneficios de todas las funciones y opciones disponibles.

Herramienta útil:

Generador de datos dbForge para SQL Server:poderosa herramienta GUI para una generación rápida de datos de prueba significativos para bases de datos de SQL Server.