Sql server 2005 - changer le schema des objets d'une base de données

Contenu du snippet

Dans la version 2005 de SQL Server, la procédure précédement utilisée (sp_changeobjectowner) n'est pas supportée.
De ce fait, la source présentée ici :
- http://www.sqlfr.com/codes/SQL-SERVER-CHANGER-OWNER-OBJETS-BASE-DONNEES_33438.aspx

Ne fonctionnera pas sous 2005.
La solution est d'utiliser ALTER SCHEMA .... (comme expliqué ici : http://www.orcsweb.com/articles/change_schema_name.aspx)

Voila donc une source qui va vous permettre de changer le schéma de tous les objets de la base avec le nouveau schéma.

-------------------------------------
A UTILISER AVEC BEAUCOUP DE PRECAUTIONS !!!!!
-------------------------------------

Source / Exemple :


USE [MaBase]
GO

DECLARE @OldSchema		AS VARCHAR(50)
DECLARE @NewSchema	AS VARCHAR(50)
DECLARE @DBName		AS VARCHAR(50)
DECLARE @SQLCMD		AS VARCHAR(2000)	

SET @DBName = 'MaBase'
SET @OldSchema = 'AncienSchema'
SET @NewSchema = 'NouveauSchema'

--------------------------------------------------------------------------
DECLARE CURSORCHANGESCHEMA CURSOR FOR SELECT 'USE ['+ @DBName +'] ALTER SCHEMA ['+ @NewSchema +']  TRANSFER ['+ SCH.name +'].['+ OBJ.name +']' AS COMPLETE_NAME 
		FROM sys.objects OBJ INNER JOIN sys.schemas SCH ON SCH.schema_id = OBJ.schema_id WHERE (OBJ.type = 'P' OR OBJ.type = 'FN') AND SCH.name = 'serveur' 
		UNION ALL SELECT 'USE ['+ @DBName +'] ALTER SCHEMA ['+ @NewSchema +']  TRANSFER ['+ TAB.TABLE_SCHEMA +'].['+ TAB.TABLE_NAME +']' AS COMPLETE_NAME 
		FROM INFORMATION_SCHEMA.TABLES TAB WHERE TAB.TABLE_SCHEMA = @OldSchema

OPEN CURSORCHANGESCHEMA
FETCH NEXT FROM CURSORCHANGESCHEMA INTO @SQLCMD
WHILE (@@fetch_status >= 0) 
	BEGIN 
		PRINT 'MODIFICATION : '+ @SQLCMD
		EXECUTE(@SQLCMD)
		FETCH NEXT FROM CURSORCHANGESCHEMA INTO @SQLCMD
	END
CLOSE CURSORCHANGESCHEMA
DEALLOCATE CURSORCHANGESCHEMA

--------------------------------------------------------------------------

Conclusion :


-------------------------------------
ATTENTION :
Ce code est à utiliser avec beaucoup de précautions. En effet, il faut bien modifier après coup les procédures stockées et vue se basant dur le Full Qualified Name, car le schéma des objets appelés a été modifié.
De plus, il ne faut pas utiliser ce code pour passer de DBO vers autre chose, car vous risquez de changer une partie des tables et vues systèmes.

-------------------------------------
Bon coding

Romelard Fabrice [MVP]

A voir également

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.