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]
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.