2009-10-27 5 views
23

Devo modificare le regole di confronto di una variabile nvarchar. By documentation:Regole di confronto delle variabili nvarchar in t-sql

(...) 3. La clausola COLLATE può essere specificato a diversi livelli. Questi includono il che segue:

Lanciare le regole di confronto di un'espressione . È possibile utilizzare la clausola COLLATE per applicare un'espressione di carattere a determinate regole di confronto. I caratteri letterali e variabili sono assegnati a le regole di confronto predefinite del database corrente. I riferimenti di colonna sono assegnati alla regola di definizione di nella colonna. Per il confronto di un'espressione , vedere Collation Precedence (Transact-SQL).

Tuttavia non riesco a capire la sintassi corretta per l'uso di CAST(), CONVERT() o dichiarazione di variabile con DECLARE per questo scopo.

risposta

28
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS 
+0

Grazie! :) 15thanks –

+0

Questo proviene da qui: http://msdn.microsoft.com/en-us/library/aa226054%28SQL.80%29.aspx – penguat

14

CAST o CONVERT è superfluo!

SELECT N'abc' COLLATE French_CS_AS 

È superfluo perché solo cambiando le regole di confronto non cambia il tipo di dati NVARCHAR.

3

Se si sta cambiando tra 2 e 1 byte, o vice-ver-sa, le codifiche dei caratteri sono quindi CAST o Converti. Non è superfluo in questi casi.

Quando la colonna di origine è una sequenza di caratteri di 2 byte (nchar, nvarchar) e la proiezione di selezione è necessaria per essere un carattere a byte singolo (char, varchar), è necessario specificare il cast e convertire. Applica la conversione della collazione prima della fusione tra i sistemi di tipi.

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