Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Alter table par lot

2 réponses
Avatar
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

2 réponses

Avatar
Fred BROUARD
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 *************************
Avatar
Clark [MVP CRM]
Bonjour
Excellent ma foi! Je vais tester ça de suite.
Merci bien

"Fred BROUARD" a écrit dans le message de
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 *************************