web-dev-qa-db-fra.com

Comment changer la garantie d'une base de données SQL Server?

J'essaie de normaliser toutes les bases de données sur une seule assiette - latin1_general_cif_as (la collation standard). J'ai des bases de données qui sont dans sql_latin1_generaleral_cp1_ci_as.

Je sais que je peux utiliser Alter base de données pour modifier la création de la base de données, mais qui n'affecte que de nouveaux objets. Ma compréhension est que le seul moyen de modifier les colonnes existantes consiste à modifier la colonne de chaque colonne de chaque table - et j'aurais besoin de chuter et de recréer tous les index pour le faire.

Je suppose que cela ressemblerait à ceci:

DROP INDEX indexname ON tablename

GO

ALTER TABLE tablename ALTER COLUMN columname varchar(50) COLLATE Latin1_General_CI_AS NULL

GO

CREATE CLUSTERED INDEX indexname ON tablename (columname ASC)

et répétez pour chaque varchar, char, texte, nvarchar, nchar et ntext colonne dans l'ensemble de la base de données. Ce serait un script énorme SQL.

Existe-t-il un moyen plus facile de le faire, ou quelqu'un peut-il suggérer un moyen d'automatiser la création d'un script SQL pour le faire?

16
Richard Gadsden

MS KB 325335 a des options sur la manière de faire cela pour l'ensemble de la DB et de toutes les colonnes.

Essentiellement:

  1. Tables de base de données de script (avec une nouvelle collation)
  2. Données DTS/SSIS (observation de la collation)
  3. Ajouter des contraintes
9
gbn

Cela pourrait avoir besoin d'un peu de peau, mais j'ai eu du succès en utilisant l'utilitaire "SQL Server Server 2000 Collation Changer": http://www.codeproject.com/kb/database/changecollation.aspx

3
user2934

Malheureusement, ce n'est pas une tâche facile dans SQL Server.

Vous pouvez utiliser un outil de script tel que Redgate's SQL Comparer pour vos objets de base de données existants (tables, procédures stockées, vues, etc.) si vous n'avez pas de licence, vous pouvez utiliser un essai gratuit. Une fois que vous avez créé la nouvelle base de données avec la bonne assiette et reconstruit les objets de votre script, vous pouvez exécuter SSIS pour transférer des données d'une base de données à une autre. Si vous avez beaucoup de données, utilisez une insertion en vrac T-SQL.

Pour avoir la bonne assiette pour les futures bases de données sur ce serveur, vous pouvez modifier la collecte par défaut sur le serveur. L'article MSDN suivant explique quels changements à l'aide des clauses de collecte de la base de données alter et d'alter Tableau:

(( réglage et modification de la base de données (SQL Server 2008 Books Online)

Vous pouvez modifier la classement de tous les nouveaux objets créés dans une base de données d'utilisateurs à l'aide de la clause de collecte de la déclaration Alter base de données . Cette déclaration ne modifie pas la classement des colonnes dans les tables existantes définies par l'utilisateur. Celles-ci peuvent être modifiées en utilisant la clause de collecte de Alter Tablea .

Lorsque vous modifiez la collecte de la base de données, vous modifiez les éléments suivants:

  • La classement par défaut pour la base de données. Cette nouvelle collation par défaut est appliquée à toutes les colonnes, types de données définis par l'utilisateur, variables et paramètres créés ultérieurement dans la base de données. Il est également utilisé lors de la résolution des identificateurs d'objet spécifiés dans les instructions SQL par rapport aux objets définis dans la base de données.
  • Tout Char, Varcharton, Text, Nchar, NvarchaRar ou Ntext Colonnes dans les tables système sont remplacés par la nouvelle collation.
  • Tous les paramètres de caractères, de NCHAR, NVARCAR, NCHAR, NVARCHAR, NCHAR, NVARCHAR, NCHAR, NVARCHAR, NCHAR, NVARCHAR, NTEXT pour les procédures stockées et les fonctions définies par l'utilisateur sont remplacés par la nouvelle collation.
  • Les types de données de système de caractères, NCHAR, NVARCAR, NCHAR, NVARCHAR, NCHAR, NVARCHAR ou NTEXT, ainsi que tous les types de données définis par l'utilisateur basés sur ces types de données système, sont remplacés par la nouvelle collation par défaut.
2
splattne

Essayez cet utilitaire , donnée à une base de données source générera tous les scripts nécessaires à appliquer sur une base de données cible afin que la collation soit modifiée en toute sécurité.

1
Manea Florin

Généralement, il n'est pas recommandé de le faire sur un serveur en direct. La dernière fois que j'ai regardé, cela n'a pas été officiellement pris en charge par Microsoft. Pour ce faire dans la pratique, vous devez créer une nouvelle instance avec la bonne assiette et migrer la base de données.

La restauration d'un dB avec un serveur avec une collation par défaut différente entraîne toutes sortes d'amusants, car Tempdb aura la classement du nouveau serveur, il n'est donc pas non plus recommandé.

Vous pouvez utiliser les vues infomation_schema pour générer un script assez facilement, mais je ne suis pas sûr que c'est le meilleur moyen de résoudre votre problème. La création de tous les index sur un DB largish pourrait prendre une énorme quantité d'espace de temps/journal, etc. J'irais avec migrer (non restaurer) à une nouvelle instance.

1
Dave Jackson