Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Sätter låsoptionsvärden för användardefinierade klustrade och icke-klustrade index eller tabeller utan klustrat index.
Databasmotor för SQL Server gör automatiskt val av sid-, rad- eller tabelllåsning. Du behöver inte ställa in dessa alternativ manuellt.
sp_indexoption erbjuds för expertanvändare som med säkerhet vet att en viss typ av lås alltid är lämplig.
Important
Den här funktionen tas bort i en framtida version av SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen. Använd ALTER INDEXi stället .
Transact-SQL syntaxkonventioner
Syntax
sys.sp_indexoption
[ @IndexNamePattern = ] N'IndexNamePattern'
, [ @OptionName = ] 'OptionName'
, [ @OptionValue = ] 'OptionValue'
[ ; ]
Arguments
[ @IndexNamePattern = ] N'IndexNamePattern'
Det kvalificerade eller icke-kvalificerade namnet på en användardefinierad tabell eller index. @IndexNamePattern är nvarchar(1035), utan standard. Anteckningstecken krävs endast om ett kvalificerat index eller bordsnamn anges. Om ett fullt kvalificerat tabellnamn, inklusive ett databasnamn, tillhandahålls, måste databasnamnet vara namnet på den aktuella databasen. Om ett tabellnamn anges utan index, sätts det angivna optionsvärdet för alla index i den tabellen och tabellen själv om inget klustrat index finns.
[ @OptionName = ] 'OptionName'
Ett indexoptionsnamn. @OptionName är varchar(35) och kan vara ett av följande värden.
| Value | Description |
|---|---|
AllowRowLocks |
När TRUE, tillåts radlås vid åtkomst till indexet. Databasmotorn avgör när radlås används. När FALSE, används inte radlås. Standardvärdet är TRUE. |
AllowPageLocks |
När TRUE, är sidlås tillåtna vid åtkomst till indexet. Databasmotorn avgör när sidlås används. När FALSE, används inte sidlås. Standardvärdet är TRUE. |
DisAllowRowLocks |
När TRUE, används inte radlås. När FALSE, tillåts radlås vid åtkomst till indexet. Databasmotorn avgör när radlås används. |
DisAllowPageLocks |
När TRUE, används inte sidlås. När FALSE, är sidlås tillåtna vid åtkomst till indexet. Databasmotorn avgör när sidlås används. |
[ @OptionValue = ] 'OptionValue'
Specificerar om inställningen @OptionName är aktiverad (TRUE, ON, yes, eller 1) eller inaktiverad (FALSE, OFF, no, eller 0).
@OptionValue är varchar(12), utan standard.
Returnera kodvärden
0 (lyckades) eller > 0 (fel).
Remarks
XML-index stöds inte. Om ett XML-index specificeras, eller ett tabellnamn anges utan indexnamn och tabellen innehåller ett XML-index, misslyckas satsen. För att ställa in dessa alternativ, använd ALTER INDEX istället.
För att visa de aktuella egenskaperna för rad- och sidlåsning, använd INDEXPROPERTY eller sys.indexes katalogvy.
- Rad-, sidnivå- och tabellnivålås är tillåtna vid åtkomst till indexet när
AllowRowLocks = TRUEellerDisAllowRowLocks = FALSE, ochAllowPageLocks = TRUEellerDisAllowPageLocks = FALSE. Databasmotorn väljer lämpligt lås och kan eskalera låset från ett rad- eller sidlås till ett tabelllås.
Endast ett tabellnivålås är tillåtet vid åtkomst till indexet när AllowRowLocks = FALSE eller DisAllowRowLocks = TRUE och AllowPageLocks = FALSE eller DisAllowPageLocks = TRUE.
Om ett tabellnamn anges utan index tillämpas inställningarna på alla index i den tabellen. När den underliggande tabellen inte har något klustrat index (det vill säga en heap) tillämpas inställningarna enligt följande:
När
AllowRowLocksellerDisAllowRowLockssätts tillTRUEellerFALSE, tillämpas inställningen på heapen och eventuella tillhörande icke-klustrade index.När
AllowPageLocksalternativet är satt tillTRUEellerDisAllowPageLocksär satt tillFALSE, tillämpas inställningen på heapen och eventuella tillhörande icke-klustrade index.När
AllowPageLocksalternativet är sattFALSEellerDisAllowPageLocksär inställt påTRUE, tillämpas inställningen fullt ut på de icke-klustrade indexen. Det vill säga, alla sidlås är förbjudna på de icke-klustrade indexen. På heapen är endast delade (S), uppdateringslås (U) och exklusiva (X) för sidan inte tillåtna. Database Engine kan fortfarande få ett intent page lock (IS, IU eller IX) för interna ändamål.
Permissions
Kräver ALTER behörighet för tabellen.
Examples
A. Sätt ett alternativ på ett specifikt index
Följande exempel tillåter inte sidlås på indexet IX_Customer_TerritoryID i Customer tabellen.
USE AdventureWorks2022;
GO
EXECUTE sp_indexoption N'Sales.Customer.IX_Customer_TerritoryID', N'disallowpagelocks', TRUE;
B. Sätt ett alternativ på alla index i en tabell
Följande exempel förbjuder radlås på alla index som är kopplade till Product tabellen. Katalogvyn sys.indexes frågas före och efter att proceduren exekveras sp_indexoption för att visa resultatet av satsen.
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. Sätt ett alternativ på en tabell utan klustrat index
Följande exempel tillåter inte sidlås på en tabell utan klustrat index (en heap). Katalogvyn sys.indexes frågas både före och efter sp_indexoption att proceduren körs för att visa resultatet av satsen.
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