Soyez le premier à donner votre avis sur cette source.
Vue 8 105 fois - Téléchargée 251 fois
-- 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
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.