sp_indexoption (Transact-SQL)sp_indexoption (Transact-SQL)

ESTE TEMA SE APLICA A:síSQL Server (a partir de 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Define los valores de la opción de bloqueo para índices clúster y no clúster definidos por el usuario o tablas sin ningún índice clúster.Sets locking option values for user-defined clustered and nonclustered indexes or tables with no clustered index.

El Motor de base de datos de SQL ServerSQL Server Database Engine selecciona automáticamente el bloqueo de nivel de página, fila o tabla.The Motor de base de datos de SQL ServerSQL Server Database Engine automatically makes choices of page-, row-, or table-level locking. No es necesario establecer estas opciones manualmente.You do not have to set these options manually. sp_indexoption se proporciona para los usuarios expertos que saben con certeza que un tipo de bloqueo determinado siempre es apropiado.sp_indexoption is provided for expert users who know with certainty that a particular type of lock is always appropriate.

Importante

Esta característica se quitará en la versión siguiente de Microsoft SQL Server.This feature will be removed in the next version of Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.En su lugar, use ALTER INDEX ( Transact-SQL ) . Instead, use ALTER INDEX (Transact-SQL).

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax


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

ArgumentosArguments

[ @IndexNamePattern=] 'table_or_index_name'[ @IndexNamePattern=] 'table_or_index_name'
Es el nombre calificado o no calificado de una tabla o índice definidos por un usuario.Is the qualified or nonqualified name of a user-defined table or index. table_or_index_name es nvarchar(1035), no tiene ningún valor predeterminado.table_or_index_name is nvarchar(1035), with no default. Las comillas solo son necesarias si se especifica un índice o nombre de tabla completo.Quotation marks are required only if a qualified index or table name is specified. Si se proporciona un nombre de tabla completo, incluido el nombre de la base de datos, el nombre de la base de datos debe ser el nombre de la base de datos actual.If a fully qualified table name, including a database name, is provided, the database name must be the name of the current database. Si se especifica un nombre de tabla sin ningún índice, el valor de la opción especificada se define para todos los índices de dicha tabla y para la tabla misma si no existe ningún índice clúster.If a table name is specified with no index, the specified option value is set for all indexes on that table and the table itself if no clustered index exists.

[ @OptionName =] 'option_name'[ @OptionName =] 'option_name'
Es un nombre de opción de índice.Is an index option name. option_name es varchar (35), no tiene ningún valor predeterminado.option_name is varchar(35), with no default. option_name puede tener uno de los siguientes valores.option_name can have one of the following values.

ValorValue DescriptionDescription
AllowRowLocksAllowRowLocks Cuando el valor es TRUE, se permiten bloqueos de fila al obtener acceso al índice.When TRUE, row locks are allowed when accessing the index. El Motor de base de datosDatabase Engine determina cuándo se usan los bloqueos de fila.The Motor de base de datosDatabase Engine determines when row locks are used. Cuando es FALSE, no se utilizan bloqueos de fila.When FALSE, row locks are not used. El valor predeterminado es TRUE.The default is TRUE.
AllowPageLocksAllowPageLocks Cuando el valor es TRUE, se permiten bloqueos de página al obtener acceso al índice.When TRUE, page locks are allowed when accessing the index. Motor de base de datosDatabase Engine determina el momento en que se usan los bloqueos de página.The Motor de base de datosDatabase Engine determines when page locks are used. Cuando es FALSE, no se utilizan bloqueos de página.When FALSE, page locks are not used. El valor predeterminado es TRUE.The default is TRUE.
DisAllowRowLocksDisAllowRowLocks Cuando es TRUE no se utilizan bloqueos de fila.When TRUE, row locks are not used. Cuando el valor es FALSE, se permiten bloqueos de fila al obtener acceso al índice.When FALSE, row locks are allowed when accessing the index. El Motor de base de datosDatabase Engine determina cuándo se usan los bloqueos de fila.The Motor de base de datosDatabase Engine determines when row locks are used.
DisAllowPageLocksDisAllowPageLocks Cuando es TRUE, no se utilizan bloqueos de página.When TRUE, page locks are not used. Cuando el valor es FALSE, se permiten bloqueos de página al obtener acceso al índice.When FALSE, page locks are allowed when accessing the index. Motor de base de datosDatabase Engine determina el momento en que se usan los bloqueos de página.The Motor de base de datosDatabase Engine determines when page locks are used.

[ @OptionValue =] 'valor'[ @OptionValue =] 'value'
Especifica si el option_name configuración está habilitado (TRUE, ON, yes o 1) o deshabilitado (FALSE, OFF, no o 0).Specifies whether the option_name setting is enabled (TRUE, ON, yes, or 1) or disabled (FALSE, OFF, no, or 0). valor es varchar (12), no tiene ningún valor predeterminado.value is varchar(12), with no default.

Valores de código de retornoReturn Code Values

0 (correcto) o mayor que 0 (error)0 (success) or greater than 0 (failure)

ComentariosRemarks

Los índices XML no se admiten.XML indexes are not supported. Si se especifica un índice XML o un nombre de tabla sin ningún nombre de índice y la tabla contiene un índice XML, la instrucción produce un error.If an XML index is specified, or a table name is specified with no index name and the table contains an XML index, the statement fails. Para establecer estas opciones, utilice ALTER INDEX en su lugar.To set these options, use ALTER INDEX instead.

Para mostrar la fila actual y la página de propiedades de bloqueo, utilice INDEXPROPERTY o sys.indexes vista de catálogo.To display the current row and page locking properties, use INDEXPROPERTY or the sys.indexes catalog view.

  • Fila, página y bloqueos de nivel de tabla se permiten al tener acceso al índice cuando AllowRowLocks = TRUE o DisAllowRowLocks = FALSE, y AllowPageLocks = TRUE o DisAllowPageLocks = FALSE.Row-, page-, and table-level locks are allowed when accessing the index when AllowRowLocks = TRUE or DisAllowRowLocks = FALSE, and AllowPageLocks = TRUE or DisAllowPageLocks = FALSE. Motor de base de datosDatabase Engine elige el bloqueo apropiado y puede cambiar de escala el bloqueo: de un bloqueo de fila o página a un bloqueo de tabla.The Motor de base de datosDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock.

    Se permite únicamente un bloqueo de nivel de tabla al obtener acceso al índice cuando AllowRowLocks = FALSE o DisAllowRowLocks = TRUE y AllowPageLocks = FALSE o DisAllowPageLocks = TRUE.Only a table-level lock is allowed when accessing the index when AllowRowLocks = FALSE or DisAllowRowLocks = TRUE and AllowPageLocks = FALSE or DisAllowPageLocks = TRUE.

    Si se especifica un nombre de tabla sin ningún índice, la configuración se aplica a todos los índices de esa tabla.If a table name is specified with no index, the settings are applied to all indexes on that table. Si la tabla subyacente no tiene ningún índice clúster (es decir, es un montón), la configuración se aplica de la siguiente manera:When the underlying table has no clustered index (that is, it is a heap) the settings are applied as follows:

  • Cuando AllowRowLocks o DisAllowRowLocks está establecida en TRUE o FALSE, la configuración se aplica al montón y cualquier índice no clúster asociado.When AllowRowLocks or DisAllowRowLocks are set to TRUE or FALSE, the setting is applied to the heap and any associated nonclustered indexes.

  • Cuando AllowPageLocks opción está establecida en TRUE o DisAllowPageLocks se establece en FALSE, la configuración se aplica al montón y cualquier índice no clúster asociado.When AllowPageLocks option is set to TRUE or DisAllowPageLocks is set to FALSE, the setting is applied to the heap and any associated nonclustered indexes.

  • Cuando AllowPageLocks opción está establecida en FALSE o DisAllowPageLocks está establecida en TRUE, la configuración se aplica por completo a los índices no clúster.When AllowPageLocks option is set FALSE or DisAllowPageLocks is set to TRUE, the setting is fully applied to the nonclustered indexes. Es decir, no se permite ningún bloqueo de página en los índices no clúster.That is, all page locks are disallowed on the nonclustered indexes. En el montón, no se permiten únicamente los bloqueos compartidos (S), de actualización (U) y exclusivos (X) de la página.On the heap, only the shared (S), update (U), and exclusive (X) locks for the page are disallowed. El Motor de base de datosDatabase Engine aún puede adquirir un bloqueo de página de intención (IS, IU o IX) por motivos internos.The Motor de base de datosDatabase Engine can still acquire an intent page lock (IS, IU or IX) for internal purposes.

PermissionsPermissions

Requiere el permiso ALTER en la tabla.Requires ALTER permission on the table.

EjemplosExamples

A.A. Definir una opción en un índice específicoSetting an option on a specific index

El siguiente ejemplo deshabilita los bloqueos de página en el IX_Customer_TerritoryID de índice en el Customer tabla.The following example disallows page locks on the IX_Customer_TerritoryID index on the Customer table.

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

B.B. Definir una opción en todos los índices de una tablaSetting an option on all indexes on a table

El siguiente ejemplo no permite bloqueos de fila en los índices asociados con la tabla Product.The following example disallows row locks on all indexes associated with the Product table. La vista de catálogo sys.indexes se consulta antes y después de ejecutar el procedimiento sp_indexoption para mostrar los resultados de la instrucción.The sys.indexes catalog view is queried before and after executing the sp_indexoption procedure to show the results of the statement.

USE AdventureWorks2012;  
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.C. Definir una opción en una tabla sin clústerSetting an option on a table with no clustered index

El siguiente ejemplo no permite bloqueos de página en una tabla sin clúster (un montón).The following example disallows page locks on a table with no clustered index (a heap). El sys.indexes se consulta la vista de catálogo antes y después de la sp_indexoption procedimiento se ejecuta para mostrar los resultados de la instrucción.The sys.indexes catalog view is queried before and after the sp_indexoption procedure is executed to show the results of the statement.

USE AdventureWorks2012;  
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  

Vea tambiénSee Also

INDEXPROPERTY (Transact-SQL) INDEXPROPERTY (Transact-SQL)
Procedimientos almacenados del sistema (Transact-SQL) System Stored Procedures (Transact-SQL)
sys.indexes (Transact-SQL)sys.indexes (Transact-SQL)