2009-08-16 6 views
7

Ho un mucchio di colonne NVARCHAR che, a mio avviso, contengono dati perfettamente archiviabili nelle colonne VARCHAR. Tuttavia non posso semplicemente andare a cambiare il tipo di colonne in VARCHAR e sperare per il meglio, ho bisogno di fare una sorta di controllo.Determinare il contenuto varchar nelle colonne nvarchar

Voglio eseguire la conversione perché i dati sono statici (non cambieranno in futuro) e le colonne sono indicizzate e trarrebbero vantaggio da un indice più piccolo (varchar) rispetto all'indice reale (nvarchar).

Se dico semplicemente

ALTER TABLE TableName ALTER COLUMN columnName VARCHAR(200) 

poi io non otterrà un errore o un avvertimento. I dati Unicode verranno troncati/persi.

Come controllo?

+0

Possiedi ambiente di test/sviluppo? –

+0

Al lavoro lo faccio e lo uso. Ma qui avevo bisogno di schiaffeggiare qualcosa di piccolo insieme per uso personale, un tempo solo per uso. –

+0

La speranza di google potrebbe raccogliere questa frase: Verifica se nvarchar contiene solo dati varchar – Thymine

risposta

22

Perché non eseguire il cast e tornare a vedere quali dati vengono persi?

Ciò presuppone colonna è di tipo nvarchar (200) per iniziare con

SELECT * 
FROM TableName 
WHERE columnName <> CAST(CAST(columnName AS varchar(200)) AS nvarchar(200)) 
+0

Ha funzionato come un incantesimo! Grazie! –

1

Hmm interessante.

Non sono sicuro di poterlo fare in una query SQL. Sei felice di farlo in codice? In tal caso, è possibile ottenere tutti i record, quindi eseguire il loop su tutti i caratteri nella stringa e controllare. Ma l'uomo è un modo lento.