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

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Define os valores da opção de bloqueio para índices clusterizados e não clusterizados definidos pelo usuário ou tabelas sem índice clusterizado.Sets locking option values for user-defined clustered and nonclustered indexes or tables with no clustered index.

O Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine faz automaticamente escolhas de bloqueio no nível de página, linha ou tabela.The Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine automatically makes choices of page-, row-, or table-level locking. Você não precisa definir essas opções manualmente.You do not have to set these options manually. sp_indexoption é fornecido para usuários especialistas que sabem com certeza que um determinado tipo de bloqueio sempre é apropriado.sp_indexoption is provided for expert users who know with certainty that a particular type of lock is always appropriate.

Importante

Esse recurso será removido na próxima versão do Microsoft SQL Server.This feature will be removed in the next version of Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Em vez disso, use ALTER INDEX (Transact-SQL).Instead, use ALTER INDEX (Transact-SQL).

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

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

ArgumentosArguments

[ @IndexNamePattern = ] 'table_or_index_name' É o nome qualificado ou não qualificado de um índice ou de tabela definido pelo usuário.[ @IndexNamePattern = ] 'table_or_index_name' Is the qualified or nonqualified name of a user-defined table or index. table_or_index_name está nvarchar(1035) , sem padrão.table_or_index_name is nvarchar(1035), with no default. As aspas são necessárias somente se um nome de índice ou tabela qualificado for especificado.Quotation marks are required only if a qualified index or table name is specified. Se um nome de tabela totalmente qualificado, incluindo um nome de banco de dados, for fornecido, o nome de banco de dados deve ser o nome do banco de dados atual.If a fully qualified table name, including a database name, is provided, the database name must be the name of the current database. Se um nome de tabela for especificado sem-índice, o valor de opção especificado será definido para todos os índices nessa tabela e para a própria tabela se não houver um índice clusterizado.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' É um nome de opção de índice.[ @OptionName = ] 'option_name' Is an index option name. option_name está varchar(35) , sem padrão.option_name is varchar(35), with no default. option_name pode ter um dos valores a seguir.option_name can have one of the following values.

ValorValue DescriçãoDescription
AllowRowLocksAllowRowLocks No caso de TRUE, são permitidos bloqueios de linha ao acessar o índice.When TRUE, row locks are allowed when accessing the index. O Mecanismo de Banco de DadosDatabase Engine determina quando os bloqueios de linha são usados.The Mecanismo de Banco de DadosDatabase Engine determines when row locks are used. No caso de FALSE, não são usados bloqueios de linha.When FALSE, row locks are not used. O padrão é TRUE.The default is TRUE.
AllowPageLocksAllowPageLocks No caso de TRUE, são permitidos bloqueios de página ao acessar o índice.When TRUE, page locks are allowed when accessing the index. O Mecanismo de Banco de DadosDatabase Engine determina quando os bloqueios de página são usados.The Mecanismo de Banco de DadosDatabase Engine determines when page locks are used. No caso de FALSE, não são usados bloqueios de página.When FALSE, page locks are not used. O padrão é TRUE.The default is TRUE.
DisAllowRowLocksDisAllowRowLocks No caso de TRUE, não são usados bloqueios de linha.When TRUE, row locks are not used. No caso de FALSE, são permitidos bloqueios de linha ao acessar o índice.When FALSE, row locks are allowed when accessing the index. O Mecanismo de Banco de DadosDatabase Engine determina quando os bloqueios de linha são usados.The Mecanismo de Banco de DadosDatabase Engine determines when row locks are used.
DisAllowPageLocksDisAllowPageLocks No caso de TRUE, não são usados bloqueios de página.When TRUE, page locks are not used. No caso de FALSE, são permitidos bloqueios de página ao acessar o índice.When FALSE, page locks are allowed when accessing the index. O Mecanismo de Banco de DadosDatabase Engine determina quando os bloqueios de página são usados.The Mecanismo de Banco de DadosDatabase Engine determines when page locks are used.

[ @OptionValue = ] 'value' Especifica se o option_name configuração está habilitada (TRUE, ON, Sim ou 1) ou desabilitado (FALSE, OFF, não ou 0).[ @OptionValue = ] 'value' Specifies whether the option_name setting is enabled (TRUE, ON, yes, or 1) or disabled (FALSE, OFF, no, or 0). valor está varchar(12) , sem padrão.value is varchar(12), with no default.

Valores do código de retornoReturn Code Values

0 (êxito) ou superior a 0 (falha)0 (success) or greater than 0 (failure)

ComentáriosRemarks

Não é oferecido suporte a índices XML.XML indexes are not supported. Se um índice XML for especificado, ou um nome de tabela for especificado sem nome de índice e a tabela tiver um índice XML, haverá falha na instrução.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 definir essas opções, use ALTER INDEX em vez disso.To set these options, use ALTER INDEX instead.

Para exibir a linha atual e a página de propriedades de bloqueio, use INDEXPROPERTY ou o sys. Indexes exibição do catálogo.To display the current row and page locking properties, use INDEXPROPERTY or the sys.indexes catalog view.

  • Linha, página e bloqueios de nível de tabela são permitidos ao acessar o índice quando AllowRowLocks = TRUE ou DisAllowRowLocks = FALSE, e AllowPageLocks = TRUE ou 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. O Mecanismo de Banco de DadosDatabase Engine escolhe o bloqueio apropriado e pode escalar o bloqueio de uma linha ou página para um bloqueio de tabela.The Mecanismo de Banco de DadosDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock.

Somente um bloqueio de nível de tabela é permitido ao acessar o índice quando AllowRowLocks = FALSE ou DisAllowRowLocks = TRUE e AllowPageLocks = FALSE ou 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.

Se um nome de tabela for especificado sem-índice, as configurações serão aplicadas a todos os índices nessa tabela.If a table name is specified with no index, the settings are applied to all indexes on that table. Quando a tabela subjacente não tiver índice clusterizado (ou seja, é um heap), as configurações serão aplicadas da seguinte forma:When the underlying table has no clustered index (that is, it is a heap) the settings are applied as follows:

  • Quando AllowRowLocks ou DisAllowRowLocks estiver definido como TRUE ou FALSE, a configuração é aplicada ao heap e quaisquer índices não clusterizados associados.When AllowRowLocks or DisAllowRowLocks are set to TRUE or FALSE, the setting is applied to the heap and any associated nonclustered indexes.

  • Quando AllowPageLocks opção é definida como TRUE ou DisAllowPageLocks é definido como FALSE, a configuração é aplicada ao heap e quaisquer índices não clusterizados associados.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.

  • Quando AllowPageLocks opção for definida como FALSE ou DisAllowPageLocks é definido como TRUE, a configuração será totalmente aplicada os índices não clusterizados.When AllowPageLocks option is set FALSE or DisAllowPageLocks is set to TRUE, the setting is fully applied to the nonclustered indexes. Ou seja, nenhum bloqueio de página é permitido nos índices não clusterizados.That is, all page locks are disallowed on the nonclustered indexes. No heap, somente os bloqueios compartilhados (S, shared), de atualização (U, update) e exclusivos (X, exclusive) de página não são permitidos.On the heap, only the shared (S), update (U), and exclusive (X) locks for the page are disallowed. O Mecanismo de Banco de DadosDatabase Engine ainda pode adquirir um bloqueio de página intencional (IS, IU ou IX) para fins internos.The Mecanismo de Banco de DadosDatabase Engine can still acquire an intent page lock (IS, IU or IX) for internal purposes.

PermissõesPermissions

Exige a permissão ALTER na tabela.Requires ALTER permission on the table.

ExemplosExamples

A.A. Definindo uma opção em um índice específicoSetting an option on a specific index

O exemplo a seguir não permite bloqueios de página sobre o IX_Customer_TerritoryID índice no Customer tabela.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. Definindo uma opção em todos os índices de uma tabelaSetting an option on all indexes on a table

O exemplo a seguir não permite bloqueios de linha em todos os índices associados com a tabela Product.The following example disallows row locks on all indexes associated with the Product table. A exibição do catálogo sys.indexes é consultada antes e depois da execução do procedimento sp_indexoption para mostrar os resultados da instrução.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. Definindo uma opção em uma tabela sem índice clusterizadoSetting an option on a table with no clustered index

O exemplo a seguir não permite bloqueios de página em uma tabela sem índice clusterizado (um heap).The following example disallows page locks on a table with no clustered index (a heap). O sys.indexes exibição de catálogo é consultada antes e depois o sp_indexoption procedimento é executado para mostrar os resultados da instrução.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  

Consulte tambémSee Also

INDEXPROPERTY (Transact-SQL) INDEXPROPERTY (Transact-SQL)
Procedimentos armazenados do sistema (Transact-SQL) System Stored Procedures (Transact-SQL)
sys.indexes (Transact-SQL)sys.indexes (Transact-SQL)