Bonjour,
Quelqu'un connait-il la syntaxe pour modifier l'ordre de tri d'une vue de données sur SQL Server 2008?
Merci
Version imprimable
Bonjour,
Quelqu'un connait-il la syntaxe pour modifier l'ordre de tri d'une vue de données sur SQL Server 2008?
Merci
J'ai été un peu rapide dans ma demande.
Il s'agit de forcer à la vue de données un collate du type Latin1_General_BIN.
Merci
Bonjour,
sur le principe, il suffit de spécifier la collation pour les colonnes concernées
Quel est le besoin ?Code:
1
2
3
4
5 CREATE VIEW LaVue AS SELECT LaColonne COLLATE Latin1_General_BIN AS LaColonne FROM LaTable
Bonjour,
La vue est déjà crée.
De plus ce sont tous les champs alphanumériques pour lesquels je vais avoir besoin de modifier le classement.
C'est pourquoi, j'envisageais de mettre la modif au niveau de la vue, mais dans les propriétés de la vue, le classement est non modifiable.
C'est une notion que je ne connaissais pas à la création de ma base de données, et toutes mes tables sont classées en French_CI_AS
Du coup SQL trie mal des désignations comme:
"Porte gauche" et "Porte-outil"
Merci.
si la vue est déjà créée, vous pouvez faire faire un ALTER !
Mais vu le besoin, pourquoi ne pas changer ça en amont, au niveau des table, voire de la base ?
Notez aussi que vous pouvez aussi le faire au niveau des requêtes finales :
Mais cela peut nuire à une bonne utilisation des indexesCode:
1
2
3
4
5 SELECT LaColonne FROM LaTable WHERE LaColonne = 'qq chose' COLLATE Latin1_General_BIN ORDER BY LaColonne COLLATE Latin1_General_BIN
Si ça peut se faire au niveau de la base de données c'est Bizance!
A condition que cela se répercute automatiquement au niveau des tables et des vues.
Mais voila, j'ai beau chercher partout, je n'arrive pas à trouver la syntaxe !
ALTER DATABASE MaBase COLLATE French_CI_AI;
A +
Non, les colonnes déjà existantes garderont leur classement, même s'il est implicite.
En revanche, les nouvelles colonnes auront le nouveau classement par défaut.
Cela pourra aussi changer le comportement des fonctions/sp/scripts existants...
Donc attention, si votre base est déjà en production, changer le classement par défaut n'est pas anodin.
Pas de soucis je fais tout cela sur une base de test.
Puisque les tables et vues n'héritent pas du changement, je vais donc modifier ma vue
Mais quand je rentre
Il me répond 'Syntaxe incorrecte vers le mot clef COLLATE'Code:
1
2
3
4
5 USE Test GO ALTER VIEW vItemAndStock COLLATE French_CS_AS_WS
alors que lorsque j'ai saisi:
Cela lui convenait très bien!Code:
1
2
3
4
5 USE Test GO ALTER DATABASE Test COLLATE French_CS_AS_WS
pour appliquer à la vue, il faut reprendre la définition de la vue et mettre le COLLATE au niveau de colonnes concernées, comme dans l'exemple que j'ai donné plus haut.
et pour appliquer au niveau des tables (des colonnes des tables en fait), il faut faire des ALTER TABLE LaTable ALTER COLUMN LaColonne VARCHAR(nn) COLLATE...
Alors j'ai essayé de modifier ma vue de données selon ton indication
et lorsque je l'exécute dans le champ en question il renvoie la valeur :'Type de données non pris en charge'Code:
1
2
3 SELECT LaColonne COLLATE Latin1_General_BIN AS LaColonne FROM LaTable
Je suis donc allé au niveau de la table, j'ai saisi la commande
et là, ça marche!Code:
1
2 ALTER TABLE LaTable ALTER COLUMN LaColonne VARCHAR(nn) COLLATE...
Aussi bien lorsque je lance un SELECT sur la table, sur la vue, et même dans mon appli, en tapant 'PORTE-' dans le champ désignation de l'article, les articles sont triés correctement!!!
J'aurais préféré une intervention au niveau de la vue de données, c'eut été plus propre, mais c'est un début.
Merci pour tout.
Bonjour,
Je n'ai rencontré aucun problème :
- à la création de la vue avec la clause COLLATE sur une table d'une seule colonne de type varchar(50).
- à la création d'une table dotée d'une seule colonne de type tinyint, suivi de la création d'une vue sur cette table comme un simple SELECT de cette colonne, suivie du changement du type de la table de tinyint vers varchar(50), suivi de la modification de la vue avec la clause COLLATE
Par ailleurs je n'ai pas obtenu le message d'erreur que vous exposez, et pour cause : il n'existe pas sys.messages.
J'ai donc vérifié toutes les versions SQL Server 2008 à SQL Server 2017 inclus, sans trouver ce message.
Ce message vous est-il donc retourné par SQL Server, ou par une application tierce ?
@++ ;)