none
Comment retrouver toutes les définitions de valeur par défaut d'une BD SQL 2008 R2 RRS feed

  • Discussion générale

  • Bonjour,

    Notre BD de production (SQL SERVER 2008) a été déplacée par un intervenant externe. Depuis nous avons des différences de structure avec nos autres BD. Ces différences sont mineures mais elles génèrent "du bruit" lors de nos comparaisons (via SQL COMPARE) avec nos autres BD (dev, tests et formation). J'ai réussi à supprimer toutes ces différences sauf celles qui concernent les valeurs par défaut. Chaque valeur par défaut est à présent entourée de 2 paires de parenthèses, au lieu d'une seul paire à l'origine.

    Voici un exemple :

    [B_ACTIF] [int] NOT NULL CONSTRAINT [DF_CRE_CHEQUIER_B_ACTIF] DEFAULT ((1))

    SQL Compare (version 8.5) distingues bien ces différences mais ne propose pas de les corriger.

    Comment puis-je retrouver par un script toutes les valeurs par défaut dans ma BD ? Voir comment supprimer une des 2 paires de parenthèse.

    Merci d'avance pour votre aide.

    Dominique

     

    lundi 29 novembre 2010 14:34

Toutes les réponses

  • J'ai un début de solution.

    Pour trouver les valeures par défaut à corriger :

     SELECT [TABLE_CATALOG]
          ,[TABLE_SCHEMA]
          ,[TABLE_NAME]
          ,[COLUMN_NAME]
          ,[COLUMN_DEFAULT]
          ,REPLACE(REPLACE([COLUMN_DEFAULT], '((','('), '))',')') as [COLUMN_DEFAULT_OK]
      FROM [INFORMATION_SCHEMA].[COLUMNS] S
      WHERE TABLE_CATALOG = 'MA_BD' AND PATINDEX('%((%',COLUMN_DEFAULT) > 0

    Mais pour exécuter une commande du type :

    ALTER TABLE [matable] DROP CONSTRAINT [DF_PER_PERSONNE_B_TVA]

    ALTER TABLE [matable] ADD CONSTRAINT [DF_PER_PERSONNE_B_TVA] DEFAULT (0) FOR [B_TVA]

    il me faut le nom de la contrainte. Et là je sèche.

    Merci d'avance pour votre aide.

    Dominique

     

    mardi 30 novembre 2010 11:28
  • J'ai trouvé comment écrire une requête pour modifier les valeurs par défaut des colonnes. Mais  mon problème persiste car je viens de m'apercevoir que SQL Server 2008 avait la mauvaise idée à la sauvegarde, de doubler les parenthèses autour des valeurs par défaut numériques. Je n'ai pas trouvé comment supprimer ce comportement, qui n'existait pas dans nos serveurs SQL 2000.

    Si quelqu'un sait comment faire je suis preneur.

     

    Merci d'avance.

    Voici quand même mon script.

     

    	DECLARE @CMD1 varchar(MAX) = '';
    	DECLARE @CMD2 varchar(MAX) = '';
    	
    	BEGIN TRAN
    
    		DECLARE MAJ CURSOR FOR 
    			SELECT 'ALTER TABLE ' + [TableName] + ' DROP CONSTRAINT ' + [DefaultConstraintName] as CMD1,
    					 'ALTER TABLE ' + [TableName] + ' ADD CONSTRAINT ' + [DefaultConstraintName] + ' DEFAULT ' + replace(replace([DefaultDefinition], '((','('), '))',')') + ' FOR ' + [ColumnName] as CMD2
    			 FROM [db_A].[VALEURS_PAR_DEFAUT]
    			 WHERE PatIndex('%((%', DefaultDefinition) > 0;
    
    		OPEN MAJ;
    
    		FETCH NEXT FROM MAJ 
    		INTO @CMD1, @CMD2;  
    		
    		WHILE @@FETCH_STATUS = 0
    		BEGIN
    		
    		 EXECUTE (@CMD1);
    		 EXECUTE (@CMD2);
    
    		 FETCH NEXT FROM MAJ 
    				 INTO @CMD1, @CMD2;
    		END
    	
    	COMMIT TRAN
    	
    	CLOSE MAJ;
    	DEALLOCATE MAJ;
    

     

    mercredi 1 décembre 2010 11:27