2009-04-10 14 views
12

Ho ereditato un progetto di sito Web asp.net che attualmente esegue SQL Server 2000 come back-end.varchar (max) MS SQL Server 2000, problemi?

Ho eseguito alcune modifiche ai database su una copia locale del database utilizzando SQL Server 2005 Express. Ho creato una tabella utilizzando le colonne varchar(max). Sono utilizzati per memorizzare frammenti di XHTML di lunghezza arbitraria.

Durante la navigazione in giro su StackOverflow mi sono imbattuto in questo: Are there any disadvantages to always using nvarchar(MAX)?

mattruma utente dice di aver trovato il "modo più duro" sull'utilizzo varchar(max) su SQL Server 2000.

Cosa devo usare al posto di varchar(max) dato che il database live viene eseguito su SQL Server 2000?

Grazie in anticipo per qualsiasi aiuto!

risposta

11

Sembra che le limitazioni varchar(MAX) siano un punto critico se il DB attivo è SQL Server 2000, che non le supporta. Se hai più di 8K caratteri da archiviare, ti rimane praticamente l'unica altra opzione, una colonna TEXT. Tuttavia, fai attenzione che le colonne TEXT hanno anche molte limitazioni.

Ad esempio non è possibile ordinarli o raggrupparli facilmente, né è possibile confrontarli per equivalenza con altre colonne. Questo non puoi dire Select * from mytable where Mytext1 = mytext2.

Altre preoccupazioni rilevanti:

  • Io suggerirei usando una colonna NText o NVarchar a prescindere dal modo in cui si va a supportare Unicode.
  • Se la tabella ha molte altre colonne e la colonna varchar(8000) è probabile che sia spesso quasi completa, è possibile che si verifichino problemi con il limite di riga di 8 KB. Tienilo a mente anche tu.
1

Utilizzare una colonna TEXT.

+0

Se si utilizza un campo di testo, ostacolerebbe le ricerche possibili su quel campo. – TheTXI

+0

@TheTXI - non c'è nulla nella domanda dell'OP relativa alla ricerca su quella colonna. –

+0

Non è consigliabile utilizzare il tipo di dati TEXT, perché [verrà rimosso in una versione futura di Microsoft SQL Server] (http://msdn.microsoft.com/en-us/library/ms187993.aspx). –

15

VARCHAR(Max) è stato introdotto in SQL Server 2005 e non funzionerà su SQL Server 2000. È necessario utilizzare VARCHAR(8000) assumendo che sia sufficientemente grande. In caso contrario, sarà necessario utilizzare TEXT

Modifica

anche se si passa a VARCHAR(8000) tenere a mente c'è un limite che una singola riga non può avere più di 8060 byte. Quindi, se si riempie una tabella varchar(8000) e si hanno un sacco di altre colonne di grandi dimensioni, si otterrà un errore. Qui entra in campo Text.

Text ha implicazioni sulle prestazioni poiché per impostazione predefinita è archiviato in una posizione separata e mantiene un puntatore in una tabella. Esiste un'opzione impostata che modifica questo comportamento in modo che i tipi di testo vengano mantenuti nella tabella finché non raggiungono una determinata dimensione. Se hai per lo più piccoli blob potresti voler abilitare questo.

+0

Abbiamo dovuto passare a VARCHAR (8000). – mattruma

0

Questo dipende dalle vostre esigenze. Puoi usare una colonna TEXT invece di VARCHAR (MAX) ma devi essere sicuro che la tua implementazione non abbia bisogno di cercare su quel campo, dato che non puoi fare il confronto sui campi TEXT e NTEXT.

Se è possibile limitare a 8000 caratteri, utilizzare una colonna VARCHAR (8000) per memorizzare le informazioni.

+0

nvarchar (4000) intendi? O varchar (8000)? – gbn

+0

buona cattura, ho aggiornato la risposta. –

Problemi correlati