sp_tableoption (Transact-SQL)
Establece los valores de las opciones de las tablas definidas por el usuario. Se puede utilizar sp_tableoption para controlar el comportamiento consecutivo de las tablas con columnas varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image, o columnas de gran tamaño definidas por el usuario.
Importante |
|---|
La característica text in row se quitará en una versión futura de SQL Server. Para almacenar datos de valores de gran tamaño, se recomienda utilizar los tipos de datos varchar(max), nvarchar(max) y varbinary(max). |
sp_tableoption se puede utilizar únicamente para definir valores de opción de tablas definidas por el usuario. Para mostrar las propiedades de tabla, utilice OBJECTPROPERTY.
La opción text in row en sp_tableoption puede habilitarse o deshabilitarse solo en tablas que contengan columnas de texto. Si la tabla no contiene una columna de texto, SQL Server genera un error.
Cuando se habilita la opción text in row, el parámetro @OptionValue permite a los usuarios especificar el tamaño máximo que debe almacenarse en una fila de un BLOB. El valor predeterminado es 256 bytes, pero los valores pueden oscilar entre 24 y 7.000 bytes.
Las cadenas text, ntext e image se almacenan en la fila de datos si se cumplen las condiciones siguientes:
La opción text in row está habilitada.
La longitud de la cadena es menor que el límite especificado en @OptionValue
Hay suficiente espacio disponible en la fila de datos.
Cuando se almacenan cadenas BLOB en la fila de datos, la lectura o escritura de cadenas text, ntext o image puede ser tan rápida como la lectura o escritura de cadenas de caracteres y binarias. SQL Server no necesita obtener acceso a páginas independientes para leer o escribir la cadena BLOB.
Si una cadena text, ntext o image es mayor que el límite especificado o que el espacio que hay disponible en la fila, lo que se almacena en la fila son punteros. Las condiciones para almacenar las cadenas BLOB en la fila siguen siendo válidas aunque debe haber espacio suficiente para almacenar los punteros en la fila de datos.
Los punteros y cadenas BLOB almacenados en la fila de una tabla se tratan de forma parecida a las cadenas de longitud variable. SQL Server solo utiliza el número de bytes necesario para almacenar la cadena o el puntero.
Las cadenas BLOB existentes no se convierten inmediatamente cuando text in row se habilita por primera vez. Las cadenas solo se convierten cuando se actualizan. De la misma manera, cuando se aumenta el límite de la opción text in row, las cadenas text, ntext o image ya existentes en la fila de datos no se convertirán para atenerse al nuevo límite hasta el momento de su actualización.
Nota |
|---|
Para deshabilitar la opción text in row o reducir el límite de la opción será necesario realizar la conversión de todos los BLOB; el proceso puede ser largo en función del número de cadenas BLOB que deban convertirse. La tabla se bloquea durante el proceso de conversión. |
Una variable de tabla, incluida una función que devuelve una variable de tabla, tiene habilitada de forma automática la opción text in row con un valor predeterminado para inline limit de 256. Esta opción no puede modificarse.
text in row admite las funciones TEXTPTR, WRITETEXT, UPDATETEXT y READTEXT. Los usuarios pueden leer partes de un BLOB con la función SUBSTRING(), pero debe recordarse que los punteros de texto consecutivos tienen límites de duración y de número distintos del resto de punteros de texto. Para obtener más información, vea Administrar datos ntext, text e image.
Para cambiar una tabla de un formato de almacenamiento vardecimal de nuevo al formato de almacenamiento decimal normal, la base de datos debe estar en modo de recuperación SIMPLE. Si se cambia el modo de recuperación, se interrumpirá la cadena de registro para las copias de seguridad; por lo tanto, debe crear una copia de seguridad completa de la base de datos después de quitar el formato de almacenamiento vardecimal de una tabla.
A. Almacenar datos xml fuera de la fila
En el siguiente ejemplo se especifica que los datos xml de la tabla HumanResources.JobCandidate se almacenen de forma no consecutiva.
USE AdventureWorks2008R2; GO EXEC sp_tableoption 'HumanResources.JobCandidate', 'large value types out of row', 1;
B. Habilitar el formato de almacenamiento vardecimal en una tabla
En el ejemplo siguiente, se modifica la tabla Production.WorkOrderRouting para almacenar el tipo de datos decimal en el storage formatvardecimal.
USE master; GO -- The database must be enabled for vardecimal storage format -- before a table can be enabled for vardecimal storage format EXEC sp_db_vardecimal_storage_format 'AdventureWorks2008R2', 'ON'; GO USE AdventureWorks2008R2; GO EXEC sp_tableoption 'Production.WorkOrderRouting', 'vardecimal storage format', 'ON';

Importante