Mercredi 15 septembre 2010 3 15 /09 /Sep /2010 10:17

Hello à tous,

 

Bon après quelques déboire avec un client, voici un petit truc pour comprendre pourquoi d'un seul coup nos commandes T-SQL sont en erreur.

 

Lorsque nous développpons sur un environnement case insensitive (repérable par leur nom contenant _CI), et bien nos commandes simples T-SQL se fichent éperdument de la casse. Ainsi, si nous devions interroger la table MaTable via une requête Sql, nous pourrions écrire:

 

SELECT * FROM MaTable

ou

SELECT * FROM matable

ou n'importe quelle combinaison de majuscule - minuscule.

 

C'est la collation de la base qui est utilisé pour gérer ça.

 

En revanche, lorsque vous passez sous une collation Case Sensitive (facile à repérer car leur nom contient _CS). La deuxième instruction tombe en erreur. En effet, les tables systèmes contenant les noms des tables sont devenues case sensitive.

 

Pour changer la collation d'une base, les commandes suivantes peuvent être exécutées:

 

USE [master]
GO
ALTER DATABASE [MaBase] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO ALTER DATABASE [MaBase] COLLATE SQL_Latin1_General_CP1_CI_AS
GO
ALTER DATABASE [MaBase] SET MULTI_USER WITH ROLLBACK IMMEDIATE;
GO

 

A noter que vous pourriez obtenir des erreurs liées à des contraintes ou autres objets actifs. Pour ça, pas d'autre moyens que de les supprimer ou les désactiver.

 

Liens connexes:

Collation Precedence

 

Par Fky - Publié dans : Sql Server
Ecrire un commentaire - Voir les 1 commentaires
Retour à l'accueil

Recherche

Catégories

Qui est Fky ?

  • Fky
  • Fky sur le Net
  • Homme
  • 10/06/1975
  • Architecte de solutions logicielles, je travaille dans les agences web et les cabinets d'étude informatique
Créer un blog gratuit sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus