Alter table par lot

Le
Clark [MVP CRM]
Bonjour

Je souhaite modifier toutes mes tables de ma base de données en leur
ajoutant 4 colonnes :
- creele
- creepar
- modifiele
- modifiepar
et insérer dans ces colonnes la date en cours et le nom de l'utilisateur
loggé.
Je pense qu'il doit y avoir un moyen de faire ça dans un script et pas table
par table. Quelqu'un aurait-il une idée?
Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred BROUARD
Le #11882351
Clark [MVP CRM] a écrit :
Bonjour

Je souhaite modifier toutes mes tables de ma base de données en leur
ajoutant 4 colonnes :
- creele
- creepar
- modifiele
- modifiepar
et insérer dans ces colonnes la date en cours et le nom de l'utilisateur
loggé.
Je pense qu'il doit y avoir un moyen de faire ça dans un script et pas
table par table. Quelqu'un aurait-il une idée?
Merci



Utilisez du sql dynamique et un curseur :

***

DECLARE @SQL NVARCHAR(4000), @S NVARCHAR(128), @T NVARCHAR(128);

DECLARE C CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';

OPEN C;

FETCH C INTO @S, @T;

WHILE @@FETCH_STATUS = 0
BEGIN

SET @SQL = N'BEGIN TRANSACTION; ';
SET @SQL = @SQL + N'ALTER TABLE ' + @S + N'.' + @T
+N' ADD CREE_LE DATETIME DEFAULT CURRENT_TIMESTAMP; ';
SET @SQL = @SQL + N'ALTER TABLE ' + @S + N'.' + @T
+N' ADD CREE_PAR VARCHAR(128); ';
SET @SQL = @SQL + N'ALTER TABLE ' + @S + N'.' + @T
+N' ADD MODIFE_LE DATETIME DEFAULT CURRENT_TIMESTAMP; ';
SET @SQL = @SQL + N'ALTER TABLE ' + @S + N'.' + @T
+N' ADD MODIFIE_PAR VARCHAR(128); ';
SET @SQL = @SQL + N'COMMIT_TRANSACTION;';

EXEC (@SQL);

FETCH C INTO @S, @T;

END;

CLOSE C;

DEALLOCATE C;

***


A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Clark [MVP CRM]
Le #11882301
Bonjour
Excellent ma foi! Je vais tester ça de suite.
Merci bien

"Fred BROUARD" news:
Clark [MVP CRM] a écrit :
Bonjour

Je souhaite modifier toutes mes tables de ma base de données en leur
ajoutant 4 colonnes :
- creele
- creepar
- modifiele
- modifiepar
et insérer dans ces colonnes la date en cours et le nom de l'utilisateur
loggé.
Je pense qu'il doit y avoir un moyen de faire ça dans un script et pas
table par table. Quelqu'un aurait-il une idée?
Merci



Utilisez du sql dynamique et un curseur :

***

DECLARE @SQL NVARCHAR(4000), @S NVARCHAR(128), @T NVARCHAR(128);

DECLARE C CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';

OPEN C;

FETCH C INTO @S, @T;

WHILE @@FETCH_STATUS = 0
BEGIN

SET @SQL = N'BEGIN TRANSACTION; ';
SET @SQL = @SQL + N'ALTER TABLE ' + @S + N'.' + @T
+N' ADD CREE_LE DATETIME DEFAULT CURRENT_TIMESTAMP; ';
SET @SQL = @SQL + N'ALTER TABLE ' + @S + N'.' + @T
+N' ADD CREE_PAR VARCHAR(128); ';
SET @SQL = @SQL + N'ALTER TABLE ' + @S + N'.' + @T
+N' ADD MODIFE_LE DATETIME DEFAULT CURRENT_TIMESTAMP; ';
SET @SQL = @SQL + N'ALTER TABLE ' + @S + N'.' + @T
+N' ADD MODIFIE_PAR VARCHAR(128); ';
SET @SQL = @SQL + N'COMMIT_TRANSACTION;';

EXEC (@SQL);

FETCH C INTO @S, @T;

END;

CLOSE C;

DEALLOCATE C;

***


A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************


Publicité
Poster une réponse
Anonyme