Usar datos text e image

Nota importanteImportante

Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. En su lugar, utilice los tipos de datos varchar(max), nvarchar(max) y varbinary(max). Para obtener más información, vea Usar tipos de datos de valores grandes.

Microsoft SQL Server almacena cadenas de más de 8.000 caracteres y datos binarios con más de 8.000 bytes en tipos de datos especiales denominados text e image. Las cadenas Unicode superiores a 4.000 caracteres se almacenan en el tipo de datos ntext.

Por ejemplo, suponga que tiene un archivo de texto grande (.TXT) con información de clientes que es necesario importar a la base de datos de SQL Server. Estos datos deben almacenarse como un único dato, en lugar de integrarlos en las diversas columnas de las tablas de datos. Para ello, puede crear una columna del tipo de datos text. Sin embargo, si necesita almacenar logotipos de empresa, almacenados actualmente como imágenes con formato TIFF (.tif) de 10 KB cada uno, cree una columna con el tipo de datos image.

Si los datos de texto que desea almacenar se encuentran en formato Unicode, use el tipo de datos ntext. Por ejemplo, una carta modelo creada para clientes internacionales seguramente contendrá ortografías y caracteres internacionales usados en varios idiomas. Almacene estos datos en una columna ntext.

Cada valor de datos de text y ntext tiene una intercalación. Las intercalaciones definen atributos como las reglas de comparación, la distinción entre mayúsculas y minúsculas y la distinción de los acentos. Las intercalaciones para los valores text también especifican una página de códigos, que define los patrones de bits que se utilizan para representar cada carácter. Cada valor ntext utiliza la página de códigos Unicode, que es la misma para todas las intercalaciones. Cada base de datos tiene una intercalación predeterminada. Cuando se crea una columna text o ntext, se le asigna la intercalación predeterminada de la base de datos, a menos que le asigne una intercalación específica mediante la cláusula COLLATE. Cuando se combinan o se comparan dos valores text o ntext que tienen intercalaciones distintas, las reglas de prioridad de intercalación determinan la intercalación que se utiliza para la operación.

Los datos de tipo image se almacenan como una cadena de bits y SQL Server no los interpreta. Cualquier interpretación de los datos de una columna image debe ser realizada por la aplicación. Por ejemplo, una aplicación puede almacenar datos en una columna image con el formato BMP, TIFF, GIF o JPEG. La aplicación que lee los datos de la columna image debe reconocer el formato de los datos y mostrarlos correctamente. Todo lo que hace una columna image es proporcionar una ubicación para almacenar la secuencia de bits que conforman los datos de la imagen.

Utilizar texto en la fila para almacenar valores text, ntext e image

Normalmente, las cadenas text, ntext o image son cadenas de caracteres o binarias grandes (hasta un máximo de 2 GB) que se almacenan fuera de una fila de datos. La fila de datos sólo contiene un puntero de texto de 16 bytes que apunta al nodo raíz de un árbol compuesto de punteros internos que asignan las páginas en las que se almacenan los fragmentos de la cadena.

SQL Server permite almacenar valores text, ntext e image pequeños o medianos en una fila de datos, lo que mejora la velocidad de las consultas que tienen acceso a estos valores.

Cuando se almacena la cadena text, ntext o image en la fila de datos, SQL Server no necesita tener acceso a una página independiente o a un conjunto de páginas para leer o escribir la cadena. Esto hace la lectura y escritura de cadenas de filas consecutivas text, ntext o image tan rápida como la lectura y escritura de cadenas varchar, nvarchar o varbinary.

Para almacenar cadenas text, ntext o image en la fila de datos, habilite la opción text in row mediante el procedimiento almacenado sp_tableoption.

sp_tableoption N'MyTable', 'text in row', 'ON';

Si lo desea, puede especificar un límite máximo, de 24 a 7.000 bytes, para la longitud de una cadena text, ntext e image almacenada en una fila de datos:

sp_tableoption N'MyTable', 'text in row', '1000';

Si especifica 'ON' en vez de un límite determinado, el valor predeterminado del límite será de 256 bytes. Este valor predeterminado proporciona la mayor parte de las ventajas de rendimiento: es suficientemente grande como para garantizar que se pueden almacenar en las filas las cadenas pequeñas y los punteros de texto raíz, pero no tan grande como para que disminuyan las filas por página y se vea afectado el rendimiento.

Aunque en general no se debe establecer el valor por debajo de 72, tampoco se debe seleccionar un valor demasiado alto, especialmente para las tablas en las que la mayor parte de las instrucciones no hacen referencia a las columnas text, ntext, e image o en las que hay varias columnas text, ntext e image.

También puede utilizar sp_tableoption para desactivar la opción especificando un valor de opción de 'OFF' o 0:

sp_tableoption N'MyTable', 'text in row', 'OFF';