Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment générer des données de test dans SQL Server

Lorsque vous testez la fonctionnalité de votre application ou les performances d'une procédure stockée spécifique ou d'une requête ad hoc dans l'environnement de développement, vous devez disposer de données stockées dans vos bases de données de développement typiques ou similaires aux données stockées dans les bases de données de production. En effet, les performances d'une requête qui traite 50 enregistrements seront différentes des performances de la même requête qui traite 50 millions de lignes. La restauration d'une copie de la base de données de production sur le serveur de base de données de développement à des fins de test n'est pas toujours une option valable, en raison des données critiques qui sont stockées dans ces bases de données et ne doivent pas être accessibles à tous les employés, sauf si vous développez un nouveau application et il n'y a pas encore de base de données de production.

L'alternative la meilleure et la plus sûre consiste à remplir les tables de la base de données de développement avec des données de test. La génération de données de test est utile pour tester les performances de l'application ou une nouvelle fonctionnalité sans modifier les données de production. Il n'existe pas de moyen simple et simple de générer des données de test adaptées à tous les scénarios, en particulier lorsque vous devez générer une grande quantité de données pour tester les performances de requêtes et de transactions complexes dans lesquelles vous devez couvrir toutes les combinaisons possibles de cas de test.

Pour remplir une table avec une grande quantité de données, le moyen le plus simple consiste à écrire un script simple qui continue d'insérer des enregistrements identiques dans la table de la base de données avec le nombre de doublons dont vous avez besoin. Mais le problème est que SQL Server Query Optimizer créera un plan différent sur la base de données de développement de celui construit sur la base de données de production en raison de la différence de distribution des données. Par exemple, le script ci-dessous remplira la table des étudiants avec 100 000 enregistrements de test redondants à l'aide du numéro GO déclaration :

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

Une autre option consiste à générer des données aléatoires en fonction du type de données de chaque colonne. La colonne ID avec la propriété IDENTITY générera automatiquement des numéros de séquence sans aucun effort de codage de votre part. Mais si vous prévoyez de générer des notes aléatoires pour les étudiants, vous pouvez profiter de la RAND() fonction T-SQL et convertissez le résultat en type de données numérique requis. Par exemple, le script ci-dessous générera 100 000 notes aléatoires pour l'élève entre 1 et 100 avec trois types de données différents :les notes INTEGER, les notes REAL et les notes DECIMAL, avec la possibilité de contrôler les plages de ces valeurs en fonction de vos compétences en mathématiques et en programmation. , comme indiqué ci-dessous :

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 génération de noms aléatoires peut également être réalisée à l'aide des bases de données de test Microsoft AdventureWorks et Northwind. . Vous devez télécharger ces bases de données à partir du site Web de Microsoft, attacher ces bases de données à votre instance SQL Server et tirer parti des données stockées dans ces bases de données pour générer des noms aléatoires dans votre base de données de développement. Par exemple, la table DimCustomer de la base de données AdventureworksDW2016CTP3 contient environ 18 000 prénoms, deuxièmes prénoms et noms de famille que vous pouvez utiliser. Vous pouvez également utiliser une instruction CROSS JOIN pour générer un grand nombre de combinaisons de ces noms pour dépasser la valeur 18K. Le script suivant peut être utilisé pour générer 100 000 prénoms et noms :

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

Des adresses e-mail et des dates aléatoires peuvent également être générées à partir des bases de données de test Microsoft. Par exemple, la colonne BirthDate et la colonne EmailAddress de la même table DimCustomer peuvent nous fournir des dates et des adresses e-mail aléatoires. Le script ci-dessous peut être utilisé pour générer une combinaison de 100 000 dates de naissance et adresses e-mail :

INSERT INTO StudentsGrades (BirthDate, EmailAddress)

SELECT TOP 100000 N.BirthDate,cN.EmailAddress

FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] N

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

Des valeurs aléatoires de la colonne Pays peuvent également être générées à l'aide de la table Person.CountryRegion de la base de données de test AdventureWorks2016CTP3. Il peut vous fournir plus de 200 noms et codes de pays dont vous pouvez tirer parti dans votre base de données de développement. Par exemple, vous pouvez le prendre comme table de recherche pour faire correspondre le nom du pays et le code, comme dans le script ci-dessous :

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

Pour générer des valeurs d'adresse aléatoires, vous pouvez tirer parti des données stockées dans la personne. Table d'adresses de la base de données de test AdventureWorks2016CTP3. Il contient plus de 19 000 adresses différentes avec leur emplacement spatial, que vous pouvez facilement utiliser dans votre base de données de développement et prendre une combinaison aléatoire à partir de ces valeurs, de la même manière que nous l'avons fait dans l'exemple précédent. Le script ci-dessous peut être facilement utilisé pour générer des adresses aléatoires de 100 000 adresses à partir de la table 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

Pour générer des mots de passe aléatoires pour des utilisateurs spécifiques du système, nous pouvons tirer parti du CRYPT_GEN_RANDOM Fonction T-SQL. Cette fonction renvoie un nombre hexadécimal cryptographique généré de manière aléatoire d'une longueur d'un nombre d'octets spécifié, généré par l'API Crypto (CAPI). La valeur renvoyée par cette fonction peut être convertie en un type de données VARCHAR afin d'avoir des mots de passe plus significatifs, comme dans le script ci-dessous, qui génère un mot de passe aléatoire de 100 000 :

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

GO 100000

La génération de données de test pour remplir les tables de la base de données de développement peut également être effectuée facilement et sans perdre de temps à écrire des scripts pour chaque type de données ou à utiliser des outils tiers. Vous pouvez trouver divers outils sur le marché qui peuvent être utilisés pour générer des données de test. L'un de ces merveilleux outils est le dbForge Data Generator for SQL Server . C'est un outil graphique puissant pour une génération rapide de données de test significatives pour les bases de données de développement. L'outil de génération de données dbForge comprend plus de 200 générateurs de données prédéfinis avec des options de configuration sensibles qui vous permettent d'émuler des données aléatoires intelligentes en colonne. L'outil permet également de générer des données de démonstration pour les bases de données SQL Server déjà remplies de données et de créer vos propres générateurs de données de test personnalisés. dbForge Data Generator pour SQL Server peut vous faire économiser du temps et des efforts consacrés à la génération de données de démonstration en remplissant les tables SQL Server avec des millions de lignes d'exemples de données qui ressemblent à des données réelles. dbForge Data Generator for SQL Server aide à remplir les tables avec les types de données les plus fréquemment utilisés tels que les types de données de base, d'entreprise, de santé, d'informatique, de localisation, de paiement et de personne. La figure ci-dessous montre la facilité d'utilisation de cet outil :

Après avoir installé l'outil dbForge Data Generator for SQL Server et exécuté cet outil, vous devez spécifier le nom du serveur cible et le nom de la base de données dans la fenêtre de connexion, comme indiqué ci-dessous :

Dans la fenêtre Options, vous pouvez spécifier le nombre de lignes à insérer dans votre tableau et d'autres options différentes qui contrôlent les critères de données de test générés, comme indiqué ci-dessous :

Après avoir personnalisé les options en fonction de vos exigences en matière de données de test, cliquez sur le , et une nouvelle fenêtre avec une liste de toutes les tables et colonnes sous la base de données sélectionnée sera affichée, demandant à vous de choisir le tableau à remplir avec les données de test, comme indiqué ci-dessous :

Choisissez simplement le tableau que vous devez remplir avec des données, et l'outil vous fournira automatiquement les données suggérées dans la section Aperçu en bas de la fenêtre et des options personnalisables pour chaque colonne de ce tableau que vous pouvez facilement personnaliser, comme indiqué ci-dessous :

Par exemple, vous pouvez choisir parmi les types de données des générateurs intégrés qui peuvent être utilisés pour générer les valeurs de la colonne ID comme décrit précédemment :

Ou personnalisez les caractéristiques des valeurs de cette colonne ID, telles que l'unicité, le minimum, le maximum et l'incrément des valeurs générées, comme ci-dessous :

De plus, la colonne First_Name peut être limitée à masculin ou féminin ou à une combinaison de ces deux types. Vous pouvez également contrôler le pourcentage de valeurs NULL ou vides dans cette colonne, comme indiqué ci-dessous :

La colonne Date de naissance peut également être contrôlée en spécifiant la catégorie dans laquelle ces étudiants appartiendront, comme les étudiants, les adolescents, les adultes ou les retraités, comme indiqué ci-dessous :

Vous pouvez également spécifier le générateur entièrement décrit qui peut être utilisé pour générer les valeurs de la colonne Pays comme indiqué ci-dessous :

Et personnalisez l'équation qui sera utilisée pour générer les valeurs de la colonne Adresse e-mail comme suit :

En plus de la complexité de l'équation personnalisable, nous générons les valeurs de la colonne Mot de passe, comme indiqué ci-dessous :

Et enfin, pour mon exemple et non pour cet outil magique, les générateurs et équations utilisés pour générer les valeurs de la colonne Adresse ci-dessous :

Après cette visite, vous pouvez imaginer comment cet outil magique vous aidera à générer des données et à simuler des scénarios en temps réel pour tester les fonctionnalités de votre application. Installez-le et profitez de toutes les fonctionnalités et options disponibles.

Outil utile :

dbForge Data Generator for SQL Server - puissant outil graphique pour une génération rapide de données de test significatives pour les bases de données SQL Server.