Question

Quelle est la meilleure façon de remplir une table SQL avec des données factices?

J'ai une grande table avec environ 40 champs de différents types (int, peu, varchar, etc.) et la nécessité de faire des tests de performance. J'utilise SQL Server 2008.

Merci!

Était-ce utile?

La solution

Générateur de données SQL par Redgate

génération de données en un seul clic

données réalistes basées sur la colonne et le nom de la table

Les données peuvent être personnalisés si désiré

Elimine les heures de travail fastidieux

Prise en charge complète pour SQL Server 2008

Autres conseils

Recommander libre, générateur, des données aléatoires personnalisées sous licence GNU http://www.generatedata.com/

réponse tardive, mais peut être utile à d'autres lecteurs de ce fil. A côté d'autres solutions, je peux recommander l'importation de données à partir d'un fichier .csv à l'aide SSMS ou des scripts d'importation SQL personnalisés, des programmes. Il y a un tutoriel étape par étape sur la façon de le faire, vous pouvez le vérifier: http://solutioncenter.apexsql.com/how-to-generate-randomized-test-data-from-a-csv-file/

Sachez que l'importation d'un fichier .csv à l'aide SSMS ou des scripts d'importation SQL personnalisée, est plus facile que la création d'inserts SQL manuellement, mais il y a des limites, comme cela est expliqué dans le tutoriel:

  

S'il y a un besoin pour des milliers de lignes à peuplées, et le fichier .csv contient quelques centaines de lignes de données, il est tout simplement pas assez. La solution de contournement est réimporter le même fichier .csv encore et jusqu'à ce que nécessaire. L'inconvénient de cette méthode est qu'elle insère de gros blocs de lignes avec les mêmes données, sans les randomiser.

Le tutoriel explique également comment utiliser une 3ème partie générateur de données SQL appelé ApexSQL Génération . L'outil a une fonction intégrée pour générer de grandes quantités de données aléatoires à partir du fichier formaté importé .csv. L'application propose un essai gratuit entièrement fonctionnel et vous pouvez télécharger et essayer pour voir si cela fonctionne pour vous.

Vous avez seulement besoin Go 1000 après votre INSERT, pour le remplir 1000 fois, comme ceci:

INSERT INTO dbo.Cusomers(Id, FirstName, LastName) VALUES(1, 'Mohamed', 'Mousavi')
GO 1000

Il fera une table avec 1000 mêmes lignes en elle. Une autre solution est que vous pouvez remplir la première ligne de votre table avec des données, puis vous remplissez les lignes suivantes du tableau en répétant la première ligne à plusieurs reprises, cela signifie que vous remplissez votre table par lui-même:

INSERT INTO dbo.Customers
SELECT * FROM dbo.Customers 
GO 10

Dans le cas d'un ou plusieurs colonnes sont l'identité (ce qui signifie qu'ils acceptent des valeurs uniques, si elle est progressive automatique), vous ne placez pas seulement dans votre requête, par exemple si Id dans dbo.Customer est l'identité, la requête va comme ceci:

INSERT INTO dbo.Customers
SELECT FirstName, Last Name FROM dbo.Customers
GO 10

Au lieu de:

INSERT INTO dbo.Customers
SELECT Id, FirstName, Last Name FROM dbo.Customers
GO 10

Sinon vous allez rencontrer cette erreur:

An explicit value for the identity column in table 'dbo.Customers' can only be specified when a column list is used and IDENTITY_INSERT is ON.

Note: C'est en quelque sorte une progression arithmétique, il va durer un peu, ne pas utiliser un grand nombre devant GO.

Si vous voulez avoir une table qui est rempli un peu plus élaborée alors vous pouvez atteindre ce même cette fois-ci en exécutant une requête simple et procédez comme suit:

  1. Choisissez l'une de vos tables qui a un nombre remarquable de lignes, dire dbo.Customers

  2. Faites un clic droit dessus et sélectionnez Script Table as > Create To > New Query Editor Window

  3. Nommez votre nouvelle table à quelque chose d'autre comme dbo.CustomersTest, vous pouvez exécuter la requête d'avoir une nouvelle table avec une structure similaire avec les dbo.Customers.

Note:. Gardez à l'esprit que si elle a une identité déposée, changer de Identity Specification to No Puisque vous êtes censé remplir la nouvelle table par les données de l'original à plusieurs reprises

  1. Exécutez la requête suivante, il va être exécuté 1000 fois, vous pouvez le modifier plus ou moins, mais sachez que cela pourrait durer menuets en fonction de votre matériel informatique:

INSERT INTO [dbo].[CustomersTest] SELECT * FROM [dbo].[Customers] GO 1000

  1. Après un certain temps, vous avez une table avec des lignes fictives dedans!

Comme mentionné @SQLMenace, Redgate Data Generator est un si bon outil pour l'accomplir, il en coûte 369 $, vous avez une chance d'essai de 14 jours Bien.

Le bon point est que Redgate identifie les clés étrangères de sorte que vous pouvez appliquer JOIN dans vos requêtes.

Vous avez un tas d'options qui vous permettent de décider comment chaque colonne est censée être remplie, chaque colonne est prévue sémantiquement afin que les données connexes sont proposées, par exemple si vous avez une colonne nommée « Département » il n'est pas rempli par des personnages étranges, il est rempli par des expressions comme « technique », « Web », « client », etc., vous pouvez même utiliser des expressions régulières pour limiter les caractères sélectionnés.

Je rempli mes tableaux avec plus de 10.000.000 dossiers qui était une simulation impressionnante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top