Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Stelt vergrendelingsopties in voor door de gebruiker gedefinieerde geclusterde en niet-geclusterde indexen of tabellen zonder geclusterde index.
De SQL Server Database Engine maakt automatisch keuzes tussen pagina-, rij- of tabelvergrendeling. Je hoeft deze opties niet handmatig in te stellen.
sp_indexoption wordt aangeboden voor deskundige gebruikers die met zekerheid weten dat een bepaald type slot altijd geschikt is.
Important
Deze functie wordt verwijderd in een toekomstige versie van SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie. Gebruik in plaats daarvan ALTER INDEX.
Transact-SQL syntaxis-conventies
Syntax
sys.sp_indexoption
[ @IndexNamePattern = ] N'IndexNamePattern'
, [ @OptionName = ] 'OptionName'
, [ @OptionValue = ] 'OptionValue'
[ ; ]
Arguments
[ @IndexNamePattern = ] N'IndexNaamPatroon'
De gekwalificeerde of niet-gekwalificeerde naam van een door de gebruiker gedefinieerde tabel of index. @IndexNamePattern is nvarchar(1035), zonder standaard. Aanhalingstekens zijn alleen vereist als een gekwalificeerde index of tabelnaam is opgegeven. Als een volledig gekwalificeerde tabelnaam, inclusief een databasenaam, wordt opgegeven, moet de databasenaam de naam zijn van de huidige database. Als een tabelnaam zonder index wordt opgegeven, wordt de opgegeven optiewaarde ingesteld voor alle indexen in die tabel en voor de tabel zelf als er geen geclusterde index bestaat.
[ @OptionName = ] 'OptionName'
Een indexoptienaam. @OptionName is varchar(35) en kan een van de volgende waarden zijn.
| Value | Description |
|---|---|
AllowRowLocks |
Wanneer TRUE, zijn rijvergrendelingen toegestaan bij het openen van de index. De database-engine bepaalt wanneer rijvergrendelingen worden gebruikt. Wanneer FALSE, worden rijvergrendelingen niet gebruikt. De standaardwaarde is TRUE. |
AllowPageLocks |
Wanneer TRUE, zijn paginavergrendelingen toegestaan bij het openen van de index. De database-engine bepaalt wanneer paginavergrendelingen worden gebruikt. Wanneer FALSE, worden paginavergrendelingen niet gebruikt. De standaardwaarde is TRUE. |
DisAllowRowLocks |
Wanneer TRUE, worden rijvergrendelingen niet gebruikt. Wanneer FALSE, zijn rijvergrendelingen toegestaan bij het openen van de index. De database-engine bepaalt wanneer rijvergrendelingen worden gebruikt. |
DisAllowPageLocks |
Wanneer TRUE, worden paginavergrendelingen niet gebruikt. Wanneer FALSE, zijn paginavergrendelingen toegestaan bij het openen van de index. De database-engine bepaalt wanneer paginavergrendelingen worden gebruikt. |
[ @OptionValue = ] 'OptionValue'
Specificeert of de @OptionName-instelling is ingeschakeld (TRUE, ON, , yesof 1) of uitgeschakeld (FALSE, OFF, no, , of 0).
@OptionValue is varchar(12), zonder standaard.
Codewaarden retourneren
0 (geslaagd) of > 0 (mislukt).
Opmerkingen
XML-indexen worden niet ondersteund. Als een XML-index wordt gespecificeerd, of een tabelnaam wordt opgegeven zonder indexnaam en de tabel bevat een XML-index, faalt de instructie. Om deze opties in te stellen, gebruik ALTER INDEX dan in plaats daarvan.
Om de huidige rij- en paginavergrendelingseigenschappen weer te geven, gebruikt u INDEXPROPERTY of de sys.indexes catalogusweergave.
- Vergrendelingen op rijniveau, paginaniveau en tabelniveau zijn toegestaan bij het openen van de index wanneer
AllowRowLocks = TRUEofDisAllowRowLocks = FALSE, enAllowPageLocks = TRUEofDisAllowPageLocks = FALSE. De database-engine kiest de juiste vergrendeling en kan de vergrendeling van een rij- of paginavergrendeling escaleren naar een tabelvergrendeling.
Alleen een tabelniveau-lock is toegestaan bij het openen van de index wanneer AllowRowLocks = FALSE of en DisAllowRowLocks = TRUEAllowPageLocks = FALSE of DisAllowPageLocks = TRUE.
Als een tabelnaam zonder index wordt gespecificeerd, worden de instellingen toegepast op alle indexen in die tabel. Wanneer de onderliggende tabel geen geclusterde index heeft (dat wil zeggen, het is een heap), worden de instellingen als volgt toegepast:
Wanneer
AllowRowLocksof op ofFALSEworden gezetTRUE, wordt de instelling toegepast op de heap en eventuele bijbehorende niet-geclusterdeDisAllowRowLocksindexen.Wanneer
AllowPageLocksde optie is ingesteld opTRUEofDisAllowPageLocksop is gezetFALSE, wordt de instelling toegepast op de heap en eventuele bijbehorende niet-geclusterde indexen.Wanneer
AllowPageLocksde optie is ingesteldFALSEofDisAllowPageLocksop is gezetTRUE, wordt de instelling volledig toegepast op de niet-geclusterde indexen. Dat wil zeggen, alle paginavergrendelingen zijn niet toegestaan op de niet-geclusterde indexen. Op de heap zijn alleen de gedeelde (S), update (U) en exclusieve (X) vergrendelingen voor de pagina niet toegestaan. De Database Engine kan nog steeds een intentiepagina-lock (IS, IU of IX) verkrijgen voor interne doeleinden.
Permissions
Vereist ALTER autorisatie op de tabel.
Examples
A. Stel een optie in op een specifieke index
Het volgende voorbeeld staat paginavergrendelingen op de IX_Customer_TerritoryID index in de Customer tabel niet toe.
USE AdventureWorks2022;
GO
EXECUTE sp_indexoption N'Sales.Customer.IX_Customer_TerritoryID', N'disallowpagelocks', TRUE;
B. Stel een optie in op alle indexen in een tabel
Het volgende voorbeeld staat rijvergrendelingen niet toe op alle indexen die aan de Product tabel zijn gekoppeld. De sys.indexes catalogusweergave wordt voor en na het uitvoeren van de sp_indexoption procedure geraadpleegd om de resultaten van de instructie te tonen.
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.
EXECUTE 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. Stel een optie in op een tabel zonder geclusterde index
Het volgende voorbeeld staat paginavergrendelingen niet toe op een tabel zonder geclusterde index (een heap). De sys.indexes catalogusweergave wordt voor en na de uitvoering van de sp_indexoption procedure opgezocht om de resultaten van de instructie te tonen.
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.
EXECUTE 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