sp_indexoption (Transact-SQL)

S’applique à :SQL Server

Définit les valeurs d'option de verrouillage des index cluster et non cluster ou des tables dépourvues d'index cluster définis par l'utilisateur.

SQL Server Moteur de base de données effectue automatiquement des choix de verrouillage au niveau de la page, de la ligne ou de la table. Vous n'avez pas besoin de définir ces options manuellement. sp_indexoption est fourni aux utilisateurs experts qui savent avec certitude qu’un type particulier de verrou est toujours approprié.

Important

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt ALTER INDEX (Transact-SQL).

Conventions de la syntaxe Transact-SQL

Syntaxe

  
sp_indexoption [ @IndexNamePattern = ] 'table_or_index_name'   
    , [ @OptionName = ] 'option_name'   
    , [ @OptionValue = ] 'value'  

Arguments

[ @IndexNamePattern = ] 'table_or_index_name' Nom qualifié ou non qualifié d’une table ou d’un index défini par l’utilisateur. table_or_index_name est nvarchar(1035), sans valeur par défaut. Les guillemets ne sont nécessaires que si l'on spécifie un nom qualifié de table ou d'index. 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. Si un nom de table est spécifié sans index, la valeur d'option spécifiée est définie pour tous les index de cette table et, si aucun index cluster n'existe, pour la table elle-même.

[ @OptionName = ] 'option_name' Nom de l’option d’index. option_name est varchar(35), sans valeur par défaut. option_name pouvez avoir l’une des valeurs suivantes.

Valeur Description
AllowRowLocks Si la valeur est TRUE, les verrous de ligne sont autorisés lors de l'accès à l'index. Le Moteur de base de données détermine le moment où les verrous de ligne sont utilisés. Si la valeur est FALSE, les verrous de ligne ne sont pas utilisés. La valeur par défaut est TRUE.
AllowPageLocks Si la valeur est TRUE, les verrous de page sont autorisés lors de l'accès à l'index. Le Moteur de base de données détermine le moment où les verrous de page sont utilisés. Si la valeur est FALSE, les verrous de page ne sont pas utilisés. La valeur par défaut est TRUE.
DisAllowRowLocks Si la valeur est TRUE, les verrous de ligne ne sont pas utilisés. Si la valeur est FALSE, les verrous de ligne sont autorisés lors de l'accès à l'index. Le Moteur de base de données détermine le moment où les verrous de ligne sont utilisés.
DisAllowPageLocks Si la valeur est TRUE, les verrous de page ne sont pas utilisés. Si la valeur est FALSE, les verrous de page sont autorisés lors de l'accès à l'index. Le Moteur de base de données détermine le moment où les verrous de page sont utilisés.

[ @OptionValue = ] 'value' Spécifie si le paramètre option_name est activé (TRUE, ON, oui ou 1) ou désactivé (FALSE, OFF, non ou 0). la valeur est varchar(12), sans valeur par défaut.

Codet de retour

0 (réussite) ou supérieur à 0 (échec)

Notes

Les index XML ne sont pas pris en charge. Si un index XML est spécifié ou qu'un nom de table est spécifié sans nom d'index et que la table contient un index XML, l'instruction échoue. Pour définir ces options, utilisez ALTER INDEX à la place.

Pour afficher les propriétés de verrouillage de ligne et de page actuelles, utilisez indexPROPERTY ou l’affichage catalogue sys.indexes .

  • Les verrous au niveau des lignes, des pages et des tables sont autorisés lors de l’accès à l’index lorsque AllowRowLocks = TRUE ou DisAllowRowLocks = FALSE et AllowPageLocks = TRUE ou DisAllowPageLocks = FALSE. Le Moteur de base de données choisit le verrou approprié et peut promouvoir un verrou de ligne ou de page en verrou de table.

Seul un verrou au niveau de la table est autorisé lors de l’accès à l’index lorsque AllowRowLocks = FALSE ou DisAllowRowLocks = TRUE et AllowPageLocks = FALSE ou DisAllowPageLocks = TRUE.

Si un nom de table est spécifié sans index, les paramétrages sont appliqués à tous les index de cette table. Lorsque la table sous-jacente ne possède aucun index cluster (en d'autres termes, il s'agit d'un segment de mémoire), les paramétrages sont appliqués comme suit :

  • Lorsque AllowRowLocks ou DisAllowRowLocks a la valeur TRUE ou FALSE, le paramètre est appliqué au tas et à tous les index non cluster associés.

  • Lorsque l’option AllowPageLocks a la valeur TRUE ou DisAllowPageLocks a la valeur FALSE, le paramètre est appliqué au tas et à tous les index non cluster associés.

  • Lorsque l’option AllowPageLocks a la valeur FALSE ou DisAllowPageLocks a la valeur TRUE, le paramètre est entièrement appliqué aux index non cluster. En d'autres termes, tous les verrous de page sont interdits sur les index non-cluster. Sur le segment de mémoire, seuls les verrous partagés (S), de mise à jour (U) et exclusifs (X) de la page sont interdits. Le Moteur de base de données peut toujours acquérir un verrou de page intentionnel (IS, IU ou IX) à des fins internes.

Autorisations

Requiert une autorisation ALTER sur la table.

Exemples

R. Définition d'une option sur un index spécifique

L’exemple suivant interdit les verrous de page sur l’index IX_Customer_TerritoryID de la Customer table.

USE AdventureWorks2022;  
GO  
EXEC sp_indexoption N'Sales.Customer.IX_Customer_TerritoryID',  
    N'disallowpagelocks', TRUE;  

B. Définition d'une option sur tous les index d'une table

L'exemple suivant interdit les verrous de ligne sur tous les index associés à la table Product. L'interrogation de l'affichage catalogue sys.indexes avant et après l'exécution de la procédure sp_indexoption permet d'afficher les résultats de l'instruction.

USE AdventureWorks2022;  
GO  
--Display the current row and page lock options for all indexes on the table.  
SELECT name, type_desc, allow_row_locks, allow_page_locks   
FROM sys.indexes  
WHERE object_id = OBJECT_ID(N'Production.Product');  
GO  
-- Set the disallowrowlocks option on the Product table.   
EXEC sp_indexoption N'Production.Product',  
    N'disallowrowlocks', TRUE;  
GO  
--Verify the row and page lock options for all indexes on the table.  
SELECT name, type_desc, allow_row_locks, allow_page_locks   
FROM sys.indexes  
WHERE object_id = OBJECT_ID(N'Production.Product');  
GO  

C. Définition d'une option sur une table dépourvue d'index cluster

L'exemple suivant interdit les verrous de page sur une table dépourvue d'index cluster (un segment de mémoire). L’affichage sys.indexes catalogue est interrogé avant et après l’exécution de la sp_indexoption procédure pour afficher les résultats de l’instruction.

USE AdventureWorks2022;  
GO  
--Display the current row and page lock options of the table.   
SELECT OBJECT_NAME (object_id) AS [Table], type_desc, allow_row_locks, allow_page_locks   
FROM sys.indexes  
WHERE OBJECT_NAME (object_id) = N'DatabaseLog';  
GO  
-- Set the disallowpagelocks option on the table.   
EXEC sp_indexoption DatabaseLog,  
    N'disallowpagelocks', TRUE;  
GO  
--Verify the row and page lock settings of the table.  
SELECT OBJECT_NAME (object_id) AS [Table], allow_row_locks, allow_page_locks   
FROM sys.indexes  
WHERE OBJECT_NAME (object_id) = N'DatabaseLog';  
GO  

Voir aussi

INDEXPROPERTY (Transact-SQL)
Procédures stockées système (Transact-SQL)
sys.indexes (Transact-SQL)