Bonjour, j'essaye de faire un script SQL qui permet de récupérer un script d'insert de données a partir d'une table qui est déja remplie.
Le script que j'ai créé marche, cependant j'aimerais l'améliorer sur un point et je ne trouve pas la solution.
Je vous laisse toutes les informations pour que vous puissiez essayer.
Le fichier CreateTableEtInserts.sql contient la creation de la table et ses données.
Le fichier RecupInserts.sql contient le script qui permet de récupérer les inserts grace a des print.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 /*==============================================================*/ /* Table : MEMBRE */ /*==============================================================*/ create table MEMBRE ( NUMERO_MEMBRE bigint identity, NOM_MEMBRE varchar(20) not null, PRENOM_MEMBRE varchar(20) not null, DATE_DE_NAISSANCE datetime null, RESPONSABILITE varchar(25) not null, CIVILITE_MEMBRE smallint not null, constraint PK_MEMBRE primary key (NUMERO_MEMBRE) ) go -------------------------------------------- -- -- -- Inserts de la Table Membre -- -- -------------------------------------------- INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Bruel' , 'Patrick' , 'sept 1 1960 12:00AM' , 'CHANTEUR' , '0') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Morgane' , 'Clara' , 'avr 5 1982 12:00AM' , 'MANAGER' , '2') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Boulet' , 'Isabelle' , 'oct 5 1970 12:00AM' , 'CHANTEUSE' , '1') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Segara' , 'Hélène' , 'déc 8 1968 12:00AM' , 'CHANTEUSE' , '1') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('NONE' , 'Lorie' , 'août 2 1985 12:00AM' , 'CHANTEUSE' , '2') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Roques' , 'Rodolphe' , 'août 1 1984 12:00AM' , 'MANAGER' , '0') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Souchon' , 'Alain' , 'juil 1 1919 12:00AM' , 'CHANTEUR' , '0') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Halliday' , 'Johnny' , 'oct 4 1945 12:00AM' , 'CHANTEUR' , '0') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('NONE' , 'Garou' , 'août 6 1954 12:00AM' , 'CHANTEUR' , '0') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Tapis' , 'Bernard' , 'mai 1 1946 12:00AM' , 'JIGOLO' , '0') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Jospin' , 'Lionnel' , 'nov 28 1909 12:00AM' , 'JIGOLO' , '0') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Bush' , 'George' , 'sept 10 1945 12:00AM' , 'GUIGNOL' , '0') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Lewinsky' , 'Monica' , 'sept 25 1969 12:00AM' , 'SECRETAIRE' , '2') GO INSERT INTO [MEMBRE] (NOM_MEMBRE,PRENOM_MEMBRE,DATE_DE_NAISSANCE,RESPONSABILITE,CIVILITE_MEMBRE) VALUES ('Sarko' , 'Nico' , 'août 30 1955 12:00AM' , 'Joueur de pipo' , '0') GO
Le probleme, c'est que y a une partie du script ou j'ai pas réussis a faire autrement que de creer une table temporaire et d'inserer les données que je voulais dedans.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 declare @ColumnCount int; declare @ListeColumn varchar(8000); declare @ListeSelect varchar(8000); set @ColumnCount = 0 set @ListeColumn = '' set @ListeSelect = '' while (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MEMBRE') > @ColumnCount begin set @ColumnCount = @ColumnCount + 1 if (COLUMNPROPERTY(OBJECT_ID('MEMBRE'),COL_NAME(OBJECT_ID('MEMBRE'), @ColumnCount),'IsIdentity') = 0) begin set @ListeColumn = @ListeColumn + (select (COL_NAME(OBJECT_ID('MEMBRE'), @ColumnCount))) set @ListeSelect = @ListeSelect + 'convert (varchar(8000),' set @ListeSelect = @ListeSelect + (select (COL_NAME(OBJECT_ID('MEMBRE'), @ColumnCount))) if (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MEMBRE') > @ColumnCount begin set @ListeColumn = @ListeColumn + ',' set @ListeSelect = @ListeSelect + ')'+'+'''''' , ''''''+' end if (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MEMBRE') = @ColumnCount begin set @ListeSelect = @ListeSelect + ')' end end end declare @VSelect varchar (8000) declare @VPrinting varchar (8000) declare @TmpTable table ( Column1 varchar(8000) ) set @VSelect = 'select '+@ListeSelect+' from membre' insert into @TmpTable (Column1) exec (@VSelect) Declare curseur_print cursor for select Column1 from @TmpTable open curseur_print; fetch next from curseur_print into @VPrinting Print '--------------------------------------------' Print '--' Print '--' Print '-- Inserts de la Table Membre' Print '--' Print '--' Print '--------------------------------------------' Print '' while (@@fetch_status = 0) begin Print 'INSERT INTO [MEMBRE] ('+@ListeColumn+')' Print 'VALUES ('''+@VPrinting+''')' Print 'GO' Print ' ' fetch next from curseur_print into @VPrinting end close curseur_print; deallocate curseur_print;
Et quand j'execute le script pour récupérer les inserts, je me retrouve avec écrit : (14*ligne(s) affectée(s))
juste au dessus de mes prints.
C'est assez génant parce que j'aimerais pouvoir ensuite l'exécuter sur plusieurs tables en meme temp et c'est pas top de devoir effacer ca entre chaque inserts.
Si quelqu'un trouve une solution ... pour pouvoir soit faire en sorte que cela s'affiche pas, soit en utilisant pas de table temporaire.
Merci.
Partager