Tipo Campo in Database .mdf e Database.sdf --- Problema con ORDER BY

mercoledì 06 maggio 2009 - 22.35

Jeremy Profilo | Guru

Buona sera a tutti.
Come già detto, sono agli inizi con SqlServer.
Grazie al prezioso suggerimento di Lorenzo Benaglia, ho già risolto un problemone relativo alla sincronizzazione tra Db sul Server e Cache locale.
Ora, nasce un problema relativo al tipo di campi da usare.
A dire il vero, essendo abituato con Access, non ho ben chiare le idee riguardo all'assegnazione del tipo di campo in funzione dei dati che deve contenere.

Ho la necessità di ordinare i record ottenuti da una query e quindi uso la clausola ORDER BY.
In un primo momento, avevo impostato, come tipo di campo per i valori String, ntext.
Durante l'esecuzione della query, ricevevo un eccezione, in quanto, sembra non sia possibile ordinare i record in base ai campi di tipo ntext
Quindi ho sostituito il tipo ntext con varchar(MAX) e l'ordinamento funziona.

Il problema, nasce dal fatto che, mediante la sincronizzazione, nel database .sdf(CE), i tipi di campo varchar(MAX) vengono interpretati come ntext .... e quindi stesso problema per la clausola ORDER BY e non so il tipo di campo corretto da impostare per fare in modo che in tutti e due casi (Server o Locale) possa fare l'ordinamento dei dati correttamente.

E' chiaro che il problema lo potrei risolvere da codice ..... ma vorrei fare chiarezza riguardo ai tipi di campo in SqlServer
C'è qualcuno che potrebbe aiutarmi a fare chiarezza ???

Grazie anticipatamente.
Ciao.

lbenaglia Profilo | Guru

>Ho la necessità di ordinare i record ottenuti da una query e
>quindi uso la clausola ORDER BY.
>In un primo momento, avevo impostato, come tipo di campo per
>i valori String, ntext.
>Durante l'esecuzione della query, ricevevo un eccezione, in quanto,
>sembra non sia possibile ordinare i record in base ai campi di
>tipo ntext
>Quindi ho sostituito il tipo ntext con varchar(MAX) e l'ordinamento
>funziona.

Ciao Tiziano,

Parliamo di stringhe: effettivamente SQL Server offre diversi data type per memorizzare questo tipo di informazioni.
Sui Books Online troverai come sempre tutte le informazioni che ti servono:
http://msdn.microsoft.com/it-it/library/ms176089.aspx
http://msdn.microsoft.com/it-it/library/ms186939.aspx

Se vuoi approfondire il discorso Unicode, puoi iniziare con questo paragrafo:
http://msdn.microsoft.com/en-us/library/ms187828.aspx

Se la lunghezza massima della colonna è inferiore agli 8000 caratteri, ti sconsiglio di utilizzare varchar(max) ma piuttosto di specificare il numero massimo di caratteri supportato, questo perché varchar(max) ha una gestione interna del tutto differente (è a tutti gli effetti un blob paragonabile in un certo senso al data type memo di Access).

Per quanto riguarda i "classici" data type blob ntext, text e image, con SQL Server 2005 sono stati deprecati quindi non utilizzarli nei tuoi progetti:
http://msdn.microsoft.com/it-it/library/ms187993.aspx

>Il problema, nasce dal fatto che, mediante la sincronizzazione,
>nel database .sdf(CE), i tipi di campo varchar(MAX) vengono interpretati
>come ntext .... e quindi stesso problema per la clausola ORDER
>BY e non so il tipo di campo corretto da impostare per fare in
>modo che in tutti e due casi (Server o Locale) possa fare l'ordinamento
>dei dati correttamente.
Risolverai specificando il numero di caratteri supportati dalla colonna varchar.

>Grazie anticipatamente.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Jeremy Profilo | Guru

Ciao Lorenzo.
Perfetto!!! Chiarissimo e utilissimo.
Approfondirò comunque.
Ciao e Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5