salve Davide,
doppiomango wrote:
errore mio... la versione è 2000
con il tipo di dato varchar(MAX) puoi esplicitare SELECT (teoriche) fino al limite stesso del tipo di dato (2g
http://msdn.microsoft.com/it-it/library/ms176089.aspx
non ho capito benissimo... (perdonami ma le mie conoscienze in materia sono basse)... tu intendi il caso in cui debba fare select di un singolo dato? che in quel caso essendo il limite di 8000 caratteri il problema non si pone... ma se dovessi avere invece necessità di 2 campi varchar da 8000 caratteri o, più probabilmente, uno svariato numero di campi la cui somma dei caratteri superi i famosi 8094? in quel caso avrei ancora il problema di prima?
grazie infinite per la pazienza ed il supporto =)
Davide
allora...
in parole molto povere, SQL Server utilizza per l'allocazione su disco un formato base minimale detto "pagina", che da SQL Server 7.0 ad ora e' basato a 8kb...
precedentemente a SQL Server 2005, ogni singola riga non poteva eccedere una singola pagina, quindi 8kb teorici (qualcosa meno, come hai gia' ben evidenziato, visto che serve spaziona anche per header di pagina, stati di riga, indicazione di nullabilita' e quant'altro) di allocazione, con l'ovvia eccezione deti tipi di dato LOB... paradossalmente, la definizione di tabella poteva eventualmenter richiedere allocazione teorica superiore alla pagina stessa, quindi l'istruzione CREATE TABLE xx ( id int PRIMARY KEY, colA varchar(8000), colB varchar(8000)); e' legittima malgrado generi un warning... verra' poi valutato al momento di effettivo utilizzo il problema di valicamento del limite stesso.. quindi sara' poi legittimo scrivere INSERT INTO xx VALUES (1, @valore_di_4000_caratteri,
@altro_valore_di_4000_caratteri); e tutte le combinazioni possibile, sempre che si rientri negli 8kb... in caso contrario verra' sollevata un'eccezione...
con SQL Server 2005 lo storage engine presenta una grande novita' permettendo ad ogni singola riga di eccedere il limite di pagina (stiamo sempre ovviamente escludendo i tipi LOB che gia' venivano gestiti diversamente)... rientra in questo concetto lo "stato" di "row overflow" che in definitiva consente completamente, nella stessa definizione di tabella precedentemente enunciata, una valorizzazione simile a INSERT INTO xx VALUES (1, @valore_di_8000_caratteri, @altro_valore_di_8000_caratteri); le "eccedenze" verrano archiviate in altrettante pagine come necessario, con lo stato di "row overflow" che verranno poi linkate alla pagina originaria... questa importante innovazione ha quindi permesso di estendere le potenzialita' di archiviazione consentendo di aumentare lo storage, ad esempio nel tipo di dato varchar, da un massimo come prima consentito di "8000" ad un massimo ora espresso in "MAX", che attualmente e' 2gb, e forse magari in futuro sara' aumentato...
saluti