sp_tableoption (Transact-SQL)

S’applique à :yesSQL Server (toutes les versions prises en charge) YesAzure SQL Database YesAzure SQL Managed Instance

Définit les valeurs d'option des tables définies par l'utilisateur. sp_tableoption pouvez être utilisé pour contrôler le comportement en ligne des tables avec varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image ou de grandes colonnes de type défini par l’utilisateur.

Important

La fonctionnalité texte de ligne sera supprimée dans une version ultérieure de SQL Server. Pour stocker des données de grande valeur, nous vous recommandons d’utiliser les types de données varchar(max), nvarchar(max) et varbinary(max).

Topic link iconConventions de la syntaxe Transact-SQL

Syntaxe

  
sp_tableoption [ @TableNamePattern = ] 'table'   
     , [ @OptionName = ] 'option_name'   
     ,[ @OptionValue =] 'value'  

Arguments

[ @TableNamePattern =] 'table'
Spécifie le nom qualifié ou non d'une table de base de données définie par l'utilisateur. Si un nom de table complet (incluant un nom de base de données) est fourni, le nom de base de données doit être celui de la base de données en cours. Vous ne pouvez pas définir simultanément les options des tables pour plusieurs tables. la table est nvarchar(776), sans valeur par défaut.

[ @OptionName = ] 'option_name'
Spécifie un nom d'option de table. option_name est varchar(35), sans valeur par défaut null. option_name peut être l’une des valeurs suivantes.

Valeur Description
table lock on bulk load Désactivée (valeur par défaut), oblige le processus de chargement en masse effectué sur les tables définies par l'utilisateur à obtenir des verrous de lignes. Activée, oblige le processus de chargement en masse effectué sur les tables définies par l'utilisateur à obtenir un verrou de mise à jour en bloc.
insert row lock N'est plus pris en charge.

Cette option n’a aucun effet sur le comportement de verrouillage de SQL Server et n’est incluse que pour la compatibilité des scripts et procédures existants.
text in row Si la valeur est OFF ou 0 (désactivé, valeur par défaut), le comportement en cours n'est pas modifié, et la ligne ne contient pas d'objet BLOB.

Lorsqu’il est spécifié et activé (activé) ou qu’une valeur entière comprise entre 24 et @OptionValue 7000, de nouveaux texte, ntext ou chaînes d’image sont stockés directement dans la ligne de données. Tous les objets BLOB existants (objet volumineux binaire : texte, ntext ou données d’image ) sont modifiés en texte au format de ligne lorsque la valeur BLOB est mise à jour. Pour plus d'informations, consultez la section Notes.
large value types out of row 1 = varchar(max), nvarchar(max), varbinary(max), xml et de grandes colonnes définies par l’utilisateur (UDT) dans la table sont stockées hors ligne, avec un pointeur de 16 octets vers la racine.

0 = varchar(max), nvarchar(max), varbinary(max), xml et de grandes valeurs définies par l’utilisateur sont stockées directement dans la ligne de données, jusqu’à une limite de 8 000 octets et tant que la valeur peut tenir dans l’enregistrement. Si la valeur ne tient pas dans l'enregistrement, un pointeur est stocké dans la ligne et le reste est stocké hors de la ligne dans l'espace de stockage LOB. La valeur par défaut est 0.

Le type défini par l’utilisateur (UDT) volumineux s’applique à : SQL Server 2008 et versions ultérieures.

Utilisez l’option TEXTIMAGE_ON CREATE TABLE pour spécifier un emplacement pour le stockage de types de données volumineux.
format de stockage vardecimal S’applique à : SQL Server 2008 et versions ultérieures.

Lorsque la valeur est TRUE, ON ou 1, la table désignée est activée pour le format de stockage vardecimal. Lorsque la valeur est FALSE, OFF ou 0, la table n'est pas activée pour le format de stockage vardecimal. Le format de stockage Vardecimal peut être activé uniquement lorsque la base de données a été activée pour le format de stockage vardecimal à l’aide de sp_db_vardecimal_storage_format. Dans SQL Server 2008 et versions ultérieures, le format de stockage vardecimal est déconseillé. Utilisez plutôt la compression ROW. Pour plus d’informations, consultez Compression de données. La valeur par défaut est 0.

[ @OptionValue =] 'value'
Indique si la option_name est activée (TRUE, ON ou 1) ou désactivée (FALSE, OFF ou 0). la valeur est varchar(12), sans valeur par défaut. la valeur ne respecte pas la casse.

Pour l'option text in row, les valeurs d'option valides sont 0, ON, OFF ou un entier compris entre 24 et 7 000. Lorsque la valeur est ON, la limite est de 256 octets par défaut.

Codet de retour

0 (succès) ou numéro d'erreur (échec)

Remarques

La procédure sp_tableoption peut être utilisée uniquement pour définir les valeurs des options des tables définies par l'utilisateur. Pour afficher les propriétés de la table, utilisez OBJECTPROPERTY ou interrogez sys.tables.

L'option text in row de sp_tableoption peut être activée ou désactivée uniquement pour les tables qui contiennent des colonnes de texte. Si la table n’a pas de colonne de texte, SQL Server génère une erreur.

Lorsque l’option texte dans la ligne est activée, le @OptionValue paramètre permet aux utilisateurs de spécifier la taille maximale à stocker dans une ligne pour un objet BLOB. La valeur par défaut est de 256 octets, mais les valeurs peuvent être comprises entre 24 et 7 000 octets.

les chaînes texte, ntext ou image sont stockées dans la ligne de données si les conditions suivantes s’appliquent :

  • l'option text in row est activée ;

  • La longueur de la chaîne est plus courte que la limite spécifiée dans @OptionValue

  • l'espace disque disponible s'avère suffisant dans la ligne de données.

Lorsque des chaînes BLOB sont stockées dans la ligne de données, la lecture et l’écriture du texte, du ntext ou des chaînes d’image peuvent être aussi rapides que la lecture ou l’écriture de caractères et de chaînes binaires. SQL Server n’a pas besoin d’accéder à des pages distinctes pour lire ou écrire la chaîne BLOB.

Si un texte, ntext ou une chaîne d’image est supérieur à la limite spécifiée ou à l’espace disponible dans la ligne, les pointeurs sont stockés dans la ligne à la place. Les conditions concernant le stockage des chaînes BLOB dans la ligne sont toujours applicables : la ligne de données doit disposer d'un espace suffisant pour contenir les pointeurs.

Les chaînes d'objets BLOB et les pointeurs stockés dans la ligne d'une table sont considérés comme des chaînes de longueur variable. SQL Server utilise uniquement le nombre d’octets requis pour stocker la chaîne ou le pointeur.

Les chaînes d'objets BLOB existantes ne sont pas converties immédiatement lorsque l'option text in row est activée pour la première fois. Ces chaînes ne sont converties que lors de leur mise à jour. De même, lorsque la limite d’option de texte dans la ligne est augmentée, le texte, le texte, ntext ou les chaînes d’image déjà présents dans la ligne de données ne seront pas convertis pour respecter la nouvelle limite jusqu’à ce qu’ils soient mis à jour.

Notes

La désactivation de l'option text in row ou la réduction de sa limite nécessite la conversion de tous les objets BLOB, ce qui peut rallonger le processus, en fonction du nombre de chaînes d'objets BLOB à convertir. La table est verrouillée au cours du processus de conversion.

Une variable de table, comprenant une fonction chargée de retourner une variable de table, possède automatiquement l'option text in row activée avec une limite incluse par défaut de 256 octets. Cette option ne peut pas être modifiée.

L’option texte dans la ligne prend en charge les fonctions TEXTPTR, WRITETEXT, UPDATETEXT et READTEXT. Les utilisateurs peuvent lire des parties d'objet BLOB avec la fonction SUBSTRING(), mais sans oublier que les pointeurs de texte en ligne ont des durées et des limites différentes des autres pointeurs de texte.

Pour rétablir une table du format de stockage vardecimal au format de stockage décimal normal, la base de données doit être en mode de récupération SIMPLE. Le changement de mode de récupération va rompre la séquence de journaux de transactions consécutifs à des fins de sauvegarde. Par conséquent, vous devez créer une sauvegarde de base de données complète après avoir supprimé le format de stockage vardecimal d'une table.

Si vous convertissez une colonne de type de données LOB existante (texte, ntext ou image) en types valeur de petite à moyenne valeur (varchar(max), nvarchar(max) ou varbinary(max)), et que la plupart des instructions ne référencent pas les colonnes de type valeur élevée dans votre environnement, envisagez de changer large_value_types_out_of_row à 1 pour obtenir des performances optimales. Lorsque la valeur de l’option large_value_types_out_of_row est modifiée, les valeurs varchar(max), nvarchar(max), varbinary(max) et xml ne sont pas immédiatement converties. Le stockage des chaînes est modifié lorsqu'elles sont mises à jour. Les nouvelles valeurs insérées dans une table sont stockées en fonction de l'option de table active. Pour obtenir des résultats immédiats, effectuez une copie des données, puis remplissez à nouveau la table après avoir modifié le paramètre de large_value_types_out_of_row ou mettez à jour chaque colonne de type valeur de petite à moyenne taille moyenne pour que le stockage des chaînes soit modifié avec l’option de table en vigueur. Vous pouvez également recréer les index sur la table après la mise à jour ou le nouveau remplissage afin de condenser la table.

Autorisations

L'exécution de sp_tableoption nécessite une autorisation ALTER sur la table.

Exemples

R. Stockage des données xml hors de la ligne

L’exemple suivant spécifie que les données xml de la HumanResources.JobCandidate table doivent être stockées hors ligne.

USE AdventureWorks2012;  
GO  
EXEC sp_tableoption 'HumanResources.JobCandidate', 'large value types out of row', 1;  

B. Activation du format de stockage vardecimal sur une table

L’exemple suivant modifie la Production.WorkOrderRouting table pour stocker le decimal type de données au vardecimal format de stockage.

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 'AdventureWorks2012', 'ON';  
GO  
USE AdventureWorks2012;  
GO  
EXEC sp_tableoption 'Production.WorkOrderRouting',   
   'vardecimal storage format', 'ON';  

Voir aussi

sys.tables (Transact-SQL)
OBJECTPROPERTY (Transact-SQL)
Procédures stockées système (Transact-SQL)
Procédures stockées du moteur de base de données (Transact-SQL)