Après avoir changé le schéma pour les objets (c'est-à-dire passer de MonAncienSchema.MaTable a MonNouveauSchema.MaTable), il faut appliquer ces changement dans les objets appelant (Procédures, Vues ou fonctions).
Voila donc un script qui effectue ce travail.
----------------------------------------------------------------------------------------------------------------
ATTENTION : FAITES UN BACKUP DE VOS BASE OU UN EXPORT EN SCRIPT DE TOUS LES OBJETS QUI SERONT MODIFIES
----------------------------------------------------------------------------------------------------------------
Source / Exemple :
USE [sccEnc]
GO
DECLARE @SQLCMD AS NVARCHAR(4000)
DECLARE @SQL AS NVARCHAR(max)
DECLARE @OldSchema AS VARCHAR(200)
DECLARE @NewSchema AS VARCHAR(200)
DECLARE @IDOBJECT AS INT
DECLARE @NUMBERLINE AS INT
SET @OldSchema = 'serveur'
SET @NewSchema = 'dbo'
DECLARE CURSORCHANGESCHEMA CURSOR FOR SELECT DISTINCT CMT.id FROM sys.syscomments CMT INNER JOIN sys.sysobjects OBJ ON CMT.id = OBJ.id
WHERE (OBJ.type = 'V' OR OBJ.type = 'P' OR OBJ.type='FN') AND NOT(OBJ.name LIKE 'dt_%') AND NOT(OBJ.name LIKE 'sp_%')
OPEN CURSORCHANGESCHEMA
FETCH NEXT FROM CURSORCHANGESCHEMA INTO @IDOBJECT
WHILE (@@fetch_status >= 0)
BEGIN
SET @SQL = ''
SELECT @NUMBERLINE = COUNT(CMT.id) FROM sys.syscomments CMT WHERE CMT.id = @IDOBJECT
PRINT CAST(@NUMBERLINE AS VARCHAR(5)) +' - '+ CAST(@IDOBJECT AS VARCHAR(10))
IF (@NUMBERLINE > 1)
BEGIN
DECLARE CURSORSP CURSOR FOR SELECT CMT.text FROM sys.syscomments CMT WHERE CMT.id = @IDOBJECT ORDER BY colid ASC
OPEN CURSORSP
FETCH NEXT FROM CURSORSP INTO @SQLCMD
WHILE (@@fetch_status >= 0)
BEGIN
SET @SQL = @SQL + CAST(@SQLCMD AS NVARCHAR(4000))
FETCH NEXT FROM CURSORSP INTO @SQLCMD
END
CLOSE CURSORSP
DEALLOCATE CURSORSP
END
ELSE
BEGIN
SELECT @SQL = CMT.text FROM sys.syscomments CMT WHERE CMT.id = @IDOBJECT
END
SET @SQL = RTRIM(LTRIM(REPLACE(REPLACE(REPLACE(@SQL, 'CREATE', 'ALTER'), @OldSchema +'.', @NewSchema +'.'), '['+ @OldSchema +'].', '['+ @NewSchema +'].')))
SET @SQL = '----------------------------------------------------------------'+ char(13) + '-- Modification effectuée le : '+ CONVERT(VARCHAR(100), getdate()) + char(13) + '----------------------------------------------------------------'+ char(10) + char(13) + @SQL
SET @SQL = @SQL + char(10) + char(13) +'----------------------------------------------------------------'
BEGIN TRY
EXECUTE(@SQL)
PRINT 'REQUETE REUSSIE : '+ char(13) + @SQL
END TRY
BEGIN CATCH
PRINT 'ERREUR ('+ ERROR_MESSAGE() +') DANS LA REQUETE : '+ char(13) + @SQL
END CATCH
FETCH NEXT FROM CURSORCHANGESCHEMA INTO @IDOBJECT
END
CLOSE CURSORCHANGESCHEMA
DEALLOCATE CURSORCHANGESCHEMA
Conclusion :
Bon coding
Romelard Fabrice [MVP]
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.