Not
Å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
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Sätter optionsvärden för användardefinierade tabeller.
sp_tableoption kan användas för att styra radbeteendet hos tabeller med varchar(max),nvarchar(max),varbinary(max),xml, text, ntext, image eller stora användardefinierade typkolumner.
Viktigt!
Text in row-funktionen kommer att tas bort i en framtida version av SQL Server. För att lagra data med stora värden rekommenderar vi att du använder varchar(max), nvarchar(max) och varbinär(max) datatyperna.
Transact-SQL syntaxkonventioner
Syntax
sp_tableoption
[ @TableNamePattern = ] N'TableNamePattern'
, [ @OptionName = ] 'OptionName'
, [ @OptionValue = ] 'OptionValue'
[ ; ]
Arguments
[ @TableNamePattern = ] N'TableNamePattern'
Det kvalificerade eller icke-kvalificerade namnet på en användardefinierad databastabell. @TableNamePattern är nvarchar(776), utan standard. Om ett fullt kvalificerat tabellnamn, inklusive ett databasnamn, tillhandahålls, måste databasnamnet vara namnet på den aktuella databasen. Tabellalternativ för flera bord kan inte ställas in samtidigt.
[ @OptionName = ] 'OptionName'
Ett bordsval. @OptionName är varchar(35) och kan vara ett av följande värden.
| Värde | Description |
|---|---|
table lock on bulk load |
När den är inaktiverad (standard) får den bulk-laddningsprocessen på användardefinierade tabeller radlås. När den är aktiverad får den bulk-laddningsprocesserna på användardefinierade tabeller att få ett bulkuppdateringslås. |
insert row lock |
Stöds inte längre. Detta alternativ påverkar inte låsbeteendet för SQL Server och ingår endast för kompatibilitet mellan befintliga skript och procedurer. |
text in row |
När OFF or 0 (inaktiverat, standard) ändrar det inte nuvarande beteende, och det finns ingen BLOB i rad.När det anges och @OptionValue är ON (aktiverat) eller ett heltalsvärde från 24 genom 7000, lagras ny text, ntext eller bildsträngar direkt i dataraden. All befintlig BLOB (binär stor objekt: text, ntext eller bild) data ändras till text i radformat när BLOB-värdet uppdateras. Mer information finns i Anmärkningar. |
large value types out of row |
1 = varchar(max),nvarchar(max),varbinary(max),xml och stora användardefinierade typkolumner (UDT) i tabellen lagras utanför raden, med en 16-bytes pekare till roten. 0 = varchar(max),nvarchar(max),varbinary(max),xml och stora UDT-värden lagras direkt i dataraden, upp till en gräns på 8 000 byte och så länge värdet får plats i posten. Om värdet inte får plats i posten lagras en pekare i raden och resten utanför raden i LOB-lagringsutrymmet. 0 är standardvärdet. Stor användardefinierad typ (UDT) gäller för: SQL Server 2008 (10.0.x) och senare. Använd TEXTIMAGE_ON alternativet SKAPA TABELL för att ange en plats för lagring av stora datatyper. |
| vardecimalt lagringsformat |
gäller för: SQL Server 2008 (10.0.x) och senare. När TRUE, ON, eller 1, är den angivna tabellen aktiverad för vardecimala lagringsformat. När FALSE, OFF, eller 0, är tabellen inte aktiverad för vardecimallagringsformat .
Vardecimal lagringsformat kan endast aktiveras när databasen är aktiverad för vardecimal lagringsformat genom att använda sp_db_vardecimal_storage_format. I SQL Server 2008 (10.0.x) och senare är vardecimallagringsformatet föråldrat. Använd ROW komprimering istället. Mer information finns i Datakomprimering. 0 är standardvärdet. |
[ @OptionValue = ] 'OptionValue'
Specificerar om @OptionName är aktiverad (TRUE, ON, eller 1) eller inaktiverad (FALSE, OFF, eller 0).
@OptionValue är varchar(12), utan standard.
@OptionValue är okänsligt för kasus.
För alternativet text i rad är 0giltiga optionsvärden , ON, , OFFeller ett heltal från 24 genom 7000. När @OptionValue är ON, är gränsen som standard 256 byte.
Returnera kodvärden
0 (lyckad) eller felnummer (misslyckande).
Anmärkningar
sp_tableoption kan endast användas för att sätta alternativvärden för användardefinierade tabeller. För att visa tabellegenskaper, använd OBJECTPROPERTY eller query sys.tables.
Alternativet sp_tableoption text i rad kan aktiveras eller inaktiveras endast i tabeller som innehåller textkolumner. Om tabellen inte har en textkolumn ger SQL Server ett felmeddelande.
När alternativet text i rad är aktiverat tillåter parametern @OptionValue användare att ange den maximala storleken som ska lagras i en rad för en BLOB. Standard är 256 byte, men värdena kan variera från 24 till 7000 byte.
Text-, ntext- eller bildsträngar lagras i dataraden om följande villkor gäller:
- Text i rad är aktiverat.
- Strängens längd är kortare än gränsen som anges i @OptionValue.
- Det finns tillräckligt med utrymme i dataraden.
När BLOB-strängar lagras i dataraden kan läsning och skrivning av text-, ntext- eller bildsträngar gå lika snabbt som att läsa eller skriva tecken- och binära strängar. SQL Server behöver inte komma åt separata sidor för att läsa eller skriva BLOB-strängen.
Om en text-, ntext- eller bildsträng är större än den angivna gränsen eller det tillgängliga utrymmet i raden, lagras pekare i raden istället. Villkoren för att lagra BLOB-strängarna i raden gäller ändå: Det måste finnas tillräckligt med utrymme i dataraden för att hålla pekarna.
BLOB-strängar och pekare som lagras i raden i en tabell behandlas på liknande sätt som strängar med variabel längd. SQL Server använder endast det antal byte som krävs för att lagra strängen eller pekaren.
Befintliga BLOB-strängar konverteras inte omedelbart när text i rad aktiveras för första gången. Strängarna konverteras endast när de uppdateras. På samma sätt, när text-i-rad-optionsgränsen ökar, konverteras inte text-, ntext- eller bildsträngarna som redan finns i dataraden för att följa den nya gränsen förrän de uppdateras.
Anmärkning
Att inaktivera alternativet text i rad eller minska begränsningen för alternativet kräver konvertering av alla BLOBs; därför kan processen vara lång, beroende på antalet BLOB-strängar som måste konverteras. Tabellen är låst under konverteringsprocessen.
En tabellvariabel, inklusive en funktion som returnerar en tabellvariabel, har automatiskt text-i-rad-alternativet aktiverat med en standardgräns på 256 inline. Detta alternativ kan inte ändras.
Alternativet text i rad stöder funktionerna TEXTPTR, WRITETEXT, UPDATETEXT och READTEXT. Användare kan läsa delar av en BLOB med funktionen SUBSTRING(), men måste komma ihåg att textpekare i rad har andra tids- och antalsgränser än andra textpekare.
För att ändra en tabell från vardecimallagringsformat tillbaka till det normala decimallagringsformatet måste databasen vara i SIMPLE-återställningsmodellen. Att ändra återställningsmodellen bryter loggkedjan för säkerhetskopiering, därför bör du skapa en fullständig databasbackup efter att ha tagit bort vardecimallagringsformatet från en tabell.
Om du konverterar en befintlig LOB-datatypkolumn (text, ntext eller bild) till små till medelstora stora värdetyper (varchar(max),nvarchar(max) eller varbinary(max)), och de flesta satser inte refererar till kolumnerna för stora värden i din miljö, överväg att ändra large_value_types_out_of_row till 1 för att uppnå optimal prestanda. När large_value_types_out_of_row optionsvärdet ändras konverteras inte befintliga varchar(max), nvarchar(max), varbinary(max)- och xml-värden omedelbart. Lagringen av strängarna ändras när de uppdateras senare. Alla nya värden som infogas i en tabell lagras enligt tabellalternativet som är i praktiken. För omedelbara resultat, antingen gör en kopia av datan och fyll sedan i tabellen igen efter att ha ändrat inställningen large_value_types_out_of_row eller uppdatera varje kolumn för små till medelstora stora värdetyper till sig själv så att lagringen av strängarna ändras med tabellalternativet aktiverat. Överväg att bygga om indexen i tabellen efter uppdateringen eller återbefolkningen för att kondensera tabellen.
Permissions
För att köra sp_tableoption krävs ALTER behörighet på tabellen.
Examples
A. Lagra XML-data utanför raden
Följande exempel specificerar att xml-data i HumanResources.JobCandidate tabellen ska lagras utanför raden.
USE AdventureWorks2022;
GO
EXECUTE sp_tableoption 'HumanResources.JobCandidate', 'large value types out of row', 1;
B. Aktivera vardecimal lagringsformat i en tabell
Följande exempel modifierar Production.WorkOrderRouting tabellen för att lagra decimaldatatypen i vardecimallagringsformatet .
USE master;
GO
-- The database must be enabled for vardecimal storage format
-- before a table can be enabled for vardecimal storage format
EXECUTE sp_db_vardecimal_storage_format 'AdventureWorks2022', 'ON';
GO
USE AdventureWorks2022;
GO
EXECUTE sp_tableoption 'Production.WorkOrderRouting', 'vardecimal storage format', 'ON';