web-dev-qa-db-fra.com

Moyen le plus rapide de remplir une table SQL avec des données factices

Quel est le moyen le plus rapide de remplir une table SQL avec des données factices? 

J'ai une large table avec environ 40 champs de types différents (int, bit, varchar, etc.) et j'ai besoin de faire des tests de performance. J'utilise SQL Server 2008.

Je vous remercie!

26
Alex

Générateur de données SQL de RedGate

Génération de données en un clic

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

Les données peuvent être personnalisées si vous le souhaitez

Élimine les heures de travail fastidieux

Prise en charge complète de SQL Server 2008

18
SQLMenace

Recommandez le générateur de données personnalisé aléatoire, gratuit et sous licence GNU http://www.generatedata.com/

37
wittrup

Réponse tardive, mais peut être utile aux autres lecteurs de ce fil de discussion. Outre d’autres solutions, je peux recommander l’importation de données à partir d’un fichier .csv à l’aide de SSMS ou de scripts d’importation, programmes. Il existe un didacticiel pas à pas sur la procédure à suivre, vous pouvez donc le vérifier: http://solutioncenter.apexsql.com/how-to-generate-randomized-test-data-from- a-csv-file/

Sachez qu'il est plus facile d'importer un fichier .csv à l'aide de SSMS ou de scripts d'importation SQL personnalisés que de créer manuellement des insertions SQL. Toutefois, il existe certaines limitations, comme expliqué dans le didacticiel: 

S'il est nécessaire de renseigner des milliers de lignes et si le fichier .csv contient quelques centaines de lignes de données, cela ne suffit pas. La solution de contournement consiste à réimporter le même fichier .csv à plusieurs reprises jusqu'à ce que vous en ayez besoin. L'inconvénient de cette méthode est qu'elle insérera de grands blocs de lignes avec les mêmes données, sans les randomiser. 

Le didacticiel explique également comment utiliser un générateur de données SQL tiers appelé ApexSQL Generate . L'outil possède une fonction intégrée permettant de générer de grandes quantités de données aléatoires à partir du fichier au format .csv importé. L'application dispose d'un essai gratuit entièrement fonctionnel afin que vous puissiez le télécharger et l'essayer pour voir si cela fonctionne pour vous.

10
TodorS

Vous avez seulement besoin de 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. Une autre solution consiste à renseigner la première ligne de votre tableau avec des données, puis à remplir les lignes suivantes du tableau en répétant la première ligne encore et encore, cela signifie que vous remplissez votre tableau seul:

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

Si une ou plusieurs colonnes sont identifiées (c'est-à-dire qu'elles acceptent des valeurs uniques, si c'est incrémental automatique), vous ne les placez pas dans votre requête, par exemple si Id dans dbo.Customer est une identité, la requête est la suivante:

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 rencontrerez 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: Ceci est une sorte de progression arithmétique, donc ça va durer un peu, n'utilisez pas un grand nombre devant GO.

Si vous voulez avoir une table un peu plus élaborée, vous pouvez y parvenir de la même manière cette fois-ci en exécutant une requête simple et en suivant les étapes suivantes:

  1. Choisissez une de vos tables qui a un nombre remarquable de lignes, disons dbo.

  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 maintenant exécuter la requête pour avoir une nouvelle table avec une structure similaire avec dbo.Customers.

Remarque: N'oubliez pas que si le fichier Identity est enregistré, modifiez le code Identity Specification to No étant donné que vous êtes censé remplir le nouveau tableau à l'aide des données de celui-ci à plusieurs reprises.

  1. Exécutez la requête suivante. Elle sera exécutée 1 000 fois. Vous pouvez la modifier en plus ou en moins, mais sachez que les menus menus peuvent durer en fonction de votre matériel informatique:

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

  1. Après un moment, vous avez une table avec des lignes factices!

Comme @SQLMenace l’a mentionné, RedGate Data Generator est un excellent outil pour le remplir. Il vous en coûtera 369 $, vous avez donc une chance d’essayer 14 jours.

Le bon point est que RedGate identifie les clés étrangères pour que vous puissiez appliquer JOIN à vos requêtes.

Vous avez un tas d'options qui vous permettent de décider comment chaque colonne est supposée être remplie, chaque colonne est anticipée sémantiquement afin que les données associées soient suggérées. Par exemple, si vous avez une colonne nommée 'Département', elle n'est pas remplie par un mot bizarre. caractères, il est rempli d'expressions telles que "Technique", "Web", "Client", etc. Même vous pouvez utiliser une expression régulière pour restreindre les caractères sélectionnés.

J'ai rempli mes tables avec plus de 10 000 000 enregistrements, ce qui était une simulation impressionnante.

0
Mohammad lm71