begin process at 2008 08 20 12:20:18
1 228 823 membres
193 nouveaux aujourd'hui
14 257 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SQL SERVER 2005 - CHANGER LE SCHEMA DES OBJETS D'UNE BASE DE DONNÉES


Information sur la source



Description

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

  • 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
  • --------------------------------------------------------------------------
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]
    Aucun commentaire pour le moment.

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS