sql-server - utilisateur - update sql exemple




Quel est le meilleur moyen de générer automatiquement des instructions INSERT pour une table SQL Server? (13)

Avez-vous déjà des données dans une base de données de production? Si tel est le cas, vous pouvez configurer une actualisation périodique des données via DTS. Nous faisons la nôtre chaque semaine le week-end et c'est très agréable d'avoir des données propres et réelles chaque semaine pour nos tests.

Si vous n'avez pas encore de production, vous devez créer une base de données qui est celle que vous voulez (fraîche). Ensuite, dupliquez cette base de données et utilisez cette base de données nouvellement créée comme environnement de test. Quand vous voulez la version propre, dupliquez simplement votre propre et Bob votre oncle .

Nous sommes en train d'écrire une nouvelle application, et pendant le test, nous aurons besoin d'un tas de données fictives. J'ai ajouté ces données en utilisant MS Access pour vider les fichiers Excel dans les tables pertinentes.

De temps en temps, nous voulons «actualiser» les tables pertinentes, ce qui signifie les supprimer, les recréer et exécuter une requête d'ajout MS Access enregistrée.

La première partie (drop & re-creation) est un script sql facile, mais la dernière partie me fait grincer des dents. Je veux un script d'installation unique qui a un tas d'INSERT pour régénérer les données fictives.

J'ai les données dans les tableaux maintenant. Quel est le meilleur moyen de générer automatiquement une grande liste d'instructions INSERT à partir de cet ensemble de données?

Je pense à quelque chose comme dans TOAD (pour Oracle) où vous pouvez cliquer sur une grille avec le bouton droit de la souris et cliquer sur Save As-> Insert Statements, et il va juste vider un grand script sql où vous voulez.

La seule façon de le faire est de sauvegarder la table sur une feuille Excel puis d'écrire une formule Excel pour créer un INSERT pour chaque ligne, ce qui n'est sûrement pas la meilleure solution.

J'utilise le 2008 Management Studio pour me connecter à une base de données SQL Server 2005.


Cela peut être fait en utilisant Visual Studio aussi (au moins dans la version 2013).

Dans VS 2013, il est également possible de filtrer la liste des lignes sur lesquelles repose l'instruction inserts, ce qui n'est pas possible dans SSMS pour autant que je sache.

Effectuez les étapes suivantes:

  • Ouvrez la fenêtre "SQL Server Object Explorer" (menu: / View / SQL Server Object Explorer)
  • Ouvrir / développer la base de données et ses tables
  • Faites un clic droit sur la table et choisissez "Afficher les données" dans le menu contextuel
  • Cela affichera les données dans la zone principale
  • Etape facultative: Cliquez sur l'icône de filtre "Trier et filtrer l'ensemble de données" (la quatrième icône à partir de la gauche sur la ligne au-dessus du résultat) et appliquez un filtre à une ou plusieurs colonnes
  • Cliquez sur les icônes "Script" ou "Script to File" (les icônes à droite de la rangée du haut, elles ressemblent à de petites feuilles de papier)

Cela créera les instructions d'insertion (conditionnelles) pour la table sélectionnée dans la fenêtre ou le fichier actif.


Les boutons "Filtre" et "Script" Visual Studio 2013 :


J'ai également beaucoup étudié ce sujet, mais je n'ai pas trouvé de solution concrète pour cela. Actuellement, l'approche que je suis est de copier le contenu dans Excel du studio SQL Server Managment, puis d'importer les données dans Oracle-TOAD, puis de générer les instructions d'insertion


J'ai utilisé ce script que j'ai mis sur mon blog ( Comment générer des procédures d'instruction d'insertion sur le serveur sql ).

Jusqu'ici, cela a fonctionné pour moi, bien qu'il puisse s'agir de bugs que je n'ai pas encore découverts.


J'utilise sqlite pour faire ça. Je trouve cela très, très utile pour créer des bases de données scratch / test.

sqlite3 foo.sqlite .dump > foo_as_a_bunch_of_inserts.sql


Le premier lien vers sp_generate_inserts est plutôt cool, voici une version très simple:

DECLARE @Fields VARCHAR(max); SET @Fields = '[QueueName], [iSort]' -- your fields, keep []
DECLARE @Table  VARCHAR(max); SET @Table  = 'Queues'               -- your table

DECLARE @SQL    VARCHAR(max)
SET @SQL = 'DECLARE @S VARCHAR(MAX)
SELECT @S = ISNULL(@S + '' UNION '', ''INSERT INTO ' + @Table + '(' + @Fields + ')'') + CHAR(13) + CHAR(10) + 
 ''SELECT '' + ' + REPLACE(REPLACE(REPLACE(@Fields, ',', ' + '', '' + '), '[', ''''''''' + CAST('),']',' AS VARCHAR(max)) + ''''''''') +' FROM ' + @Table + '
PRINT @S'

EXEC (@SQL)

Sur mon système, j'obtiens ce résultat:

INSERT INTO Queues([QueueName], [iSort])
SELECT 'WD: Auto Capture', '10' UNION 
SELECT 'Car/Lar', '11' UNION 
SELECT 'Scan Line', '21' UNION 
SELECT 'OCR', '22' UNION 
SELECT 'Dynamic Template', '23' UNION 
SELECT 'Fix MICR', '41' UNION 
SELECT 'Fix MICR (Supervisor)', '42' UNION 
SELECT 'Foreign MICR', '43' UNION 
...

Microsoft devrait annoncer cette fonctionnalité de SSMS 2008. La fonctionnalité que vous recherchez est intégrée à l'utilitaire Generate Script , mais la fonctionnalité est désactivée par défaut et doit être activée lors de l'écriture d'un script dans une table.

Il s'agit d'une exécution rapide pour générer les instructions INSERT pour toutes les données de votre table, sans utiliser de scripts ou de compléments pour SQL Management Studio 2008:

  1. Cliquez avec le bouton droit sur la base de données et accédez à Tâches > Générer des scripts .
  2. Sélectionnez les tables (ou objets) que vous souhaitez générer le script.
  3. Allez dans l'onglet Définir les options de script et cliquez sur le bouton Avancé .
  4. Dans la catégorie Général , accédez à Type de données à scripter
  5. Il existe trois options: Schéma uniquement , Données uniquement et Schéma et données . Sélectionnez l'option appropriée et cliquez sur OK .

Vous obtiendrez alors l'instruction CREATE TABLE et toutes les instructions INSERT pour les données directement à partir de SSMS.


Ne pas utiliser d'inserts, utiliser BCP


Pas sûr, si je comprends bien votre question.

Si vous avez des données dans MS-Access, que vous souhaitez déplacer vers SQL Server, vous pouvez utiliser DTS.
Et, je suppose que vous pourriez utiliser SQL profiler pour voir toutes les instructions INSERT en cours, je suppose.




Si vous avez besoin d'un accès par programme, vous pouvez utiliser une procédure stockée open source `GenerateInsert.

INSERT générateur de déclaration (s)

Juste comme un exemple simple et rapide, pour générer des instructions INSERT pour une table AdventureWorks.Person.AddressType exécuter les instructions suivantes:

USE [AdventureWorks];
GO
EXECUTE dbo.GenerateInsert @ObjectName = N'Person.AddressType';

Cela va générer le script suivant:

SET NOCOUNT ON
SET IDENTITY_INSERT Person.AddressType ON
INSERT INTO Person.AddressType
([AddressTypeID],[Name],[rowguid],[ModifiedDate])
VALUES
 (1,N'Billing','B84F78B1-4EFE-4A0E-8CB7-70E9F112F886',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(2,N'Home','41BC2FF6-F0FC-475F-8EB9-CEC0805AA0F2',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(3,N'Main Office','8EEEC28C-07A2-4FB9-AD0A-42D4A0BBC575',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(4,N'Primary','24CB3088-4345-47C4-86C5-17B535133D1E',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(5,N'Shipping','B29DA3F8-19A3-47DA-9DAA-15C84F4A83A5',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(6,N'Archive','A67F238A-5BA2-444B-966C-0467ED9C427F',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
SET IDENTITY_INSERT Person.AddressType OFF

GenerateData est un outil incroyable pour cela. Il est également très facile d'y apporter des modifications car le code source est disponible pour vous. Quelques belles caractéristiques:

  • Générateur de noms pour les noms de personnes et les lieux
  • Possibilité de sauvegarder le profil de génération (après le téléchargement et la configuration locale)
  • Possibilité de personnaliser et de manipuler la génération à l'aide de scripts
  • Beaucoup de sorties différentes (CSV, Javascript, JSON, etc.) pour les données (au cas où vous devriez tester l'ensemble dans des environnements différents et que vous voulez passer l'accès à la base de données)
  • Gratuit Mais pensez à faire un don si vous trouvez le logiciel utile :).





code-generation