SQL Server évoluant, les types de données de la version 2000 seront de moins en moins supportés. Certains sont considérés comme obsolète (ils ne fonctionneront plus dans une version future) et d’autres inadéquat (TIMESTAMP, SMALLDATETIME, MONEY, DATETIME…). Voici une méthode pour les remplacer tous dans toutes vos tables de la base courante.
Le tableau ci dessous montre quels types doivent être changés (OLD) et par quel autre type (NEW) :
------------- --------------
image VARBINARY(max)
text VARCHAR(max)
ntext NVARCHAR(max)
timestamp ROWVERSION
datetime DATETIME2(3)
smalldatetime DATETIME2(0)
money DECIMAL(19,4)
La requête ci dessous produit un script SQL permettant de changer l’un vers l’autre dans toutes vos tables :
(SELECT N'image' AS OLD, N'VARBINARY(max)' AS NEW
UNION ALL
SELECT N'text', N'VARCHAR(max)'
UNION ALL
SELECT N'ntext', N'NVARCHAR(max)'
UNION ALL
SELECT N'timestamp', N'ROWVERSION'
UNION ALL
SELECT N'datetime', N'DATETIME2(3)'
UNION ALL
SELECT N'smalldatetime', N'DATETIME2(0)'
UNION ALL
SELECT N'money', N'DECIMAL(19,4)')
SELECT
N'
BEGIN TRANSACTION;
BEGIN TRY
EXEC (''ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] ADD [' + COLUMN_NAME + '_tmp] ' + NEW + ';'')
EXEC (''UPDATE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] SET [' + COLUMN_NAME + '_tmp] = [' + COLUMN_NAME + '];'')
EXEC (''ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] DROP COLUMN [' + COLUMN_NAME + '];'')
EXEC sp_rename ''[' + TABLE_SCHEMA + '].[' + TABLE_NAME + '].[' + COLUMN_NAME + '_tmp]'', ''' + COLUMN_NAME + ''';
COMMIT;
END TRY
BEGIN CATCH
DECLARE @ERR NVARCHAR(1200);
SET @ERR = ERROR_MESSAGE();
IF XACT_STATE() 0
ROLLBACK;
RAISERROR(@ERR, 16, 1);
END CATCH;
GO
'
FROM INFORMATION_SCHEMA.COLUMNS AS C
INNER JOIN T
ON C.DATA_TYPE = T.OLD;
Il n’y a plus ensuite qu’à lancer le résultat de cette requête en exécution.
* * *
Expert S.G.B.D relationnelles et langage S.Q.L
Moste Valuable Professionnal Microsoft SQL Server
Société SQLspot : modélisation, conseil, formation,
optimisation, audit, tuning, administration SGBDR
Enseignant: CNAM PACA, ISEN Toulon, CESI Aix en Prov.
L’entreprise SQL Spot
Le site web sur le SQL et les SGBDR