2009-04-10 20 views
12

He heredado un proyecto de sitio web asp.net que actualmente ejecuta SQL Server 2000 como su back-end.varchar (max) MS SQL Server 2000, ¿problemas?

He estado haciendo algunos cambios de bases de datos en una copia local de la base de datos utilizando SQL Server 2005 Express. Creé una tabla usando columnas varchar(max). Se usan para fragmentos almacenados de XHTML que tienen una longitud arbitraria.

Mientras navega alrededor en StackOverflow me encontré con esto: Are there any disadvantages to always using nvarchar(MAX)?

mattruma usuario dice que encontró el "camino difícil" sobre el uso de varchar(max) en SQL Server 2000.

¿Qué debo usar en lugar de varchar(max) dado que la base de datos en vivo se ejecuta en SQL Server 2000?

¡Gracias de antemano por cualquier ayuda!

Respuesta

11

Parece que las limitaciones de varchar(MAX) son un punto discutible si su base de datos en vivo es SQL Server 2000, que no las admite. Si tiene más de 8K caracteres para almacenar, prácticamente le queda la única opción, una columna TEXT. Sin embargo, tenga en cuenta que las columnas TEXT también tienen muchas limitaciones.

Por ejemplo, no puede ordenarlos o agruparlos fácilmente, ni puede compararlos por equivalencia con otras columnas. Es decir, no puedes decir Select * from mytable where Mytext1 = mytext2.

Otras preocupaciones relevantes:

  • me gustaría sugerir el uso de una columna de NText o NVarchar independientemente de la forma en que vaya a ser compatible con Unicode.
  • Si la tabla tiene muchas otras columnas y es probable que la columna varchar(8000) esté con frecuencia casi llena, puede tener problemas con el límite de 8K. Tenga esto en cuenta también.
1

Utilice una columna de TEXTO.

+0

Si utiliza un campo de texto, obstaculizaría posibles búsquedas en ese campo. – TheTXI

+0

@TheTXI - no hay nada en la pregunta del OP relacionado con la búsqueda en esa columna. –

+0

No recomendaría usar el tipo de datos TEXTO, porque [se eliminará en una versión futura de Microsoft SQL Server] (http://msdn.microsoft.com/en-us/library/ms187993.aspx). –

15

VARCHAR(Max) se introdujo en SQL Server 2005, y no funcionará en SQL Server 2000. Debe utilizar VARCHAR(8000) asumiendo que será lo suficientemente grande. De lo contrario, tendrá que utilizar TEXT

Editar

también si se cambia a VARCHAR(8000) tener en cuenta que hay un límite que una sola fila no puede tener más de 8060 bytes. Entonces, si llena una tabla varchar(8000) y tiene otras muchas columnas grandes, obtendrá un error. Aquí es donde entra Text.

Text tiene implicación en el rendimiento porque, de forma predeterminada, se almacena en una ubicación separada, y mantienen un puntero en una tabla. Hay una opción establecida que cambia este comportamiento para que los tipos de texto se mantengan en la tabla hasta que alcancen un determinado tamaño. Si tiene principalmente blobs pequeños, es posible que desee habilitar esto.

+0

Tuvimos que cambiar a VARCHAR (8000). – mattruma

0

Esto depende de sus necesidades. Puede usar una columna TEXT en lugar de VARCHAR (MAX), pero debe asegurarse de que su implementación no necesite buscar en ese campo, ya que no puede hacer comparaciones en los campos TEXT y NTEXT.

Si puede limitarse a 8000 caracteres, usaría una columna VARCHAR (8000) para almacenar la información.

+0

nvarchar (4000) ¿quieres decir? O varchar (8000)? – gbn

+0

buena captura, actualicé la respuesta. –

Cuestiones relacionadas