dans le cas du passage de SQL 7 à SQL 2000 j'ai été confronté à un probleme. Le classement entre ces 2 moteurs avaient changé.
plusieurs options sont donc possible :
1 - installé SQL 2000 avec le meme classement que sql 7
2 - transférer les données d'une base sql 7 vers sql 2000
j'ai choisi cette seconde option et comme mes clients n'ont pas tous l'outil d'import et d'export de sql, j'ai écrit ce petit script.
Source / Exemple :
-- Script de Dump et de load des données d'une base vers une autre
-- Note :
-- Les 2 bases doivent avoir la meme structure
-- si il existe des données dans la base de destination, elles seront supprimées
-- Les 2 bases doivent être installées sur le même moteur
-- le transfert des données passant par un dossier disque, ne pas oublier de le créer avant
-- il est conseillé de désactiver les contraintes d'intégrité avant de lancer le traitement
--
Set NOCOUNT ON
go
Declare @BaseSource VarChar(50)
Declare @BaseDest VarChar(50)
Declare @TableName VarChar(50)
Declare @CmdExport VarChar(2000)
Declare @CmdImport VarChar(2000)
Declare @Requete VarChar(5000)
Set @BaseSource = 'NombaseSource'
Set @BaseDest = 'Nombasedest'
Exec master..Xp_CmdShell 'Del C:\Dump\*.Txt', NO_OUTPUT
Exec master..Xp_CmdShell 'Del C:\Dump\Log\*.Log', NO_OUTPUT
Declare Cur_Table Cursor For
Select name from sysobjects where type='U'
And (name like 'T\_%' escape '\' Or name like 'W\_%' escape '\' Or name like 'X\_%' escape '\')
Order by Name
Open Cur_Table
Fetch Next From Cur_Table Into @TableName
While @@Fetch_Status = 0
Begin
Print ''
Print '----------> ' + Upper(@TableName) + ' <----------'
Print 'Export dans C:\Dump\' + @TableName + '.txt à partir de ' + @BaseSource + '.Dbo.' + @TableName
Set @CmdExport = 'BCP "' + @BaseSource + '.Dbo.' + @TableName + '" Out "c:\Dump\' + @TableName + '.txt" -n -V 70 -U sa -P bigboss -E -e C:\Dump\Log\' + @TableName + '_Exp.log -a 65535 -m 10000 -R'
--Print @CmdExport
Exec master..Xp_CmdShell @CmdExport, NO_OUTPUT
--
Print 'Vidage de la table ' + @BaseDest + '.Dbo.' + @TableName + ' avant import'
Set @Requete = 'Delete ' + @BaseDest + '.Dbo.' + @TableName
Exec (@Requete)
--
Print 'Import dans ' + @BaseDest + '.Dbo.' + @TableName + ' à partir de C:\Dump\' + @TableName + '.txt'
Set @CmdImport = 'BCP "' + @BaseDest + '.Dbo.' + @TableName + '" In "c:\Dump\' + @TableName + '.txt" -n -V 70 -U sa -P bigboss -E -e C:\Dump\Log\' + @TableName + '_Imp.log -a 65535 -m 10000 -R'
Print @CmdImport
Exec master..Xp_CmdShell @CmdImport, NO_OUTPUT
Fetch Next From Cur_Table Into @TableName
End
Close Cur_Table
Print ''
Print ''
Print '----------> Contrôle du nombre d''enregistrements transférés <----------'
Open Cur_Table
Fetch Next From Cur_Table Into @TableName
While @@Fetch_Status = 0
Begin
Print 'Contrôle de la table : ' + @TableName
Set @Requete = 'Declare @NbLgBaseSource Int
If Exists(Select Name From ' + @BaseSource + '.Dbo.SysObjects Where Name = ''' + @TableName + ''')
Begin
Select @NbLgBaseSource = Count(*) From ' + @BaseSource + '.Dbo.' + @TableName + '
End
Else
Begin
Set @NbLgBaseSource = 0
End
Declare @NbLgBaseDest Int
If Exists(Select Name From ' + @BaseDest + '.Dbo.SysObjects Where Name = ''' + @TableName + ''')
Begin
Select @NbLgBaseDest = Count(*) From ' + @BaseDest + '.Dbo.' + @TableName + '
End
Else
Begin
Set @NbLgBaseDest = 0
End
If @NbLgBaseSource <> @NbLgBaseDest
Begin
Print ''ERREUR --- Nombre de ligne différent entre ' + @BaseSource + '.Dbo.' + @TableName + ''' + ''('' + Cast(@NbLgBaseSource as VarChar) +
'') et ' + @BaseDest + '.Dbo.' + @TableName + ''' + ''('' + Cast(@NbLgBaseDest as VarChar) + '')''
End'
--print @requete
Exec (@Requete)
Fetch Next From Cur_Table Into @TableName
End
Close Cur_Table
Deallocate Cur_Table
Print 'Traitement terminé !'
Set NOCOUNT OFF
Conclusion :
cez n'est peut etre pas la meilleure solution mais en tout cas cela marche.
a vos claviers pour les critiques
Pat
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.