web-dev-qa-db-fra.com

Assemblage des variables nvarchar dans t-sql

Je dois changer le classement d'une variable nvarchar. Par documentation :

(...) 3. La clause COLLATE peut être spécifiée à plusieurs niveaux. Ceux-ci incluent le Suivant:

Lancer la collation d'un expression. Vous pouvez utiliser le COLLATE clause d'application d'une expression de caractère à un certain classement. Personnage les littéraux et les variables sont attribués le classement par défaut du courant base de données. Les références de colonne sont assigné la définition collation de la colonne. Pour la collation d'un expression, voir Collation Precedence (Transact-SQL).

Cependant, je ne peux pas déterminer la syntaxe correcte pour l'utilisation de CAST (), CONVERT () ou d'une déclaration de variable avec DECLARE à cette fin.

26
Sandor Davidhazi
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
31
Lukasz Lysik

CAST ou CONVERT est superflu!

SELECT N'abc' COLLATE French_CS_AS

Il est superflu car le simple fait de modifier le classement ne modifie pas le type de données NVARCHAR.

16
nalply

Si vous passez de 2 à 1 octet, ou vice-versa, des codages de caractères, alors CAST ou Convert est nécessaire. Ce n'est pas superflu dans ces cas.

Lorsque la colonne source est une séquence de caractères sur 2 octets (nchar, nvarchar) et que la projection de sélection doit comporter un caractère sur un seul octet (char, varchar), vous devez spécifier la conversion et la conversion. Appliquez la conversion de classement avant la conversion entre les systèmes de types.

SELECT CAST(N'ФBC' COLLATE SQL_Latin1_General_CP1_CI_AS as varchar(10)) AS ProjectedSingleByte
4
Robert Livermore

Si vous souhaitez comparer ou joindre deux colonnes de classements différents, cela pourrait aider . Dans mon cas, je devais comparer deux colonnes avec l'une utilisant 'SQL_Latin1_General_CP1_CI_AS' et l'autre utilisant 'Latin1_General_CP1_CI_AS'.

J'ai simplement utilisé cette option pour rejoindre ces deux personnes.

sur A.Person = B.NAME collate database_default

1
Xavier_prash