Sdílet prostřednictvím


sp_tableoption (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Nastavuje hodnoty možností pro uživatelsky definované tabulky. sp_tableoption Lze použít k řízení chování tabulek v řádku pomocí sloupců varchar(max),nvarchar(max),varbinary(max), xml, text, ntext, image nebo velkých uživatelsky definovaných typových sloupců.

Důležité

Funkce text in row bude v budoucí verzi SQL Serveru odstraněna. Pro ukládání dat s velkou hodnotou doporučujeme používat datové typy varchar(max),nvarchar(max) a varbinary(max ).

Transact-SQL konvence syntaxe

Syntaxe

sp_tableoption
    [ @TableNamePattern = ] N'TableNamePattern'
    , [ @OptionName = ] 'OptionName'
    , [ @OptionValue = ] 'OptionValue'
[ ; ]

Arguments

[ @TableNamePattern = ] N'TableNamePattern'

Kvalifikovaný nebo nekvalifikovaný název uživatelem definované databázové tabulky. @TableNamePattern je nvarchar(776), bez výchozího nastavení. Pokud je uveden plně kvalifikovaný název tabulky, včetně názvu databáze, musí být název databáze názvem aktuální databáze. Možnosti tabulek pro více tabulek nelze nastavit současně.

[ @OptionName = ] 'OptionName'

Název volby tabulky. @OptionName je varchar(35) a může mít jednu z následujících hodnot.

Hodnota Description
table lock on bulk load Pokud je deaktivováno (výchozí), způsobí, že proces hromadného načítání uživatelsky definovaných tabulek získá zámky řádků. Po zapnutí způsobí, že procesy hromadného načítání uživatelsky definovaných tabulek získají zámek hromadné aktualizace.
insert row lock Už se nepodporuje.

Tato možnost nemá vliv na chování zamykaní SQL Serveru a je zahrnuta pouze pro kompatibilitu existujících skriptů a procedur.
text in row Když OFF je nebo 0 (vypnuto, výchozí), nemění to aktuální chování a v řadě není žádný BLOB.

Pokud je zadáno a @OptionValue je ON (povoleno) nebo celočíselná hodnota od 24 přes , 7000jsou novétextové, ntextové nebo obrazové řetězce uloženy přímo do datového řádku. Všechna existující data BLOB (binární velké objekty: text, ntext nebo obrázek) jsou při aktualizaci hodnoty BLOB změněna na text ve formátu řádku. Další informace naleznete v tématu Poznámky.
large value types out of row 1 = varchar(max), nvarchar(max), varbinary(max), xml a velké uživatelsky definované typy (UDT) sloupce v tabulce jsou uloženy mimo řádek, s 16bajtovým ukazatelem na kořen.

0 = varchar(max), nvarchar(max), varbinary(max), xml a velké UDT hodnoty jsou uloženy přímo v datovém řádku, do limitu 8 000 bajtů a pokud se hodnota vejde do záznamu. Pokud hodnota do záznamu nepasuje, ukazatel se uloží do řádku a zbytek je uložen mimo řádek v LOB úložném prostoru. 0 je výchozí hodnota.

Velký uživatelsky definovaný typ (UDT) platí na: SQL Server 2008 (10.0.x) a novější.

Použijte TEXTIMAGE_ON možnost VYTVOŘIT TABULKU pro určení místa pro ukládání velkých datových typů.
Vardecimální formát paměti platí pro: SQL Server 2008 (10.0.x) a novější.

Když TRUE, ON, nebo 1, je určená tabulka povolena pro formát vardecimálního úložiště. Když FALSE, OFF, nebo 0, tabulka není povolena pro vardecimální formát úložiště. Vardecimální formát ukládání lze povolit pouze tehdy, když je databáze povolena pro vardecimální formát pomocí sp_db_vardecimal_storage_format. V SQL Server 2008 (10.0.x) a novějších je formát vardecimálního úložiště zastaralý. Použijte ROW místo toho kompresi. Další informace najdete v tématu Komprese dat. 0 je výchozí hodnota.

[ @OptionValue = ] 'OptionValue'

Specifikuje, zda je @OptionName povolen (TRUE, ON, nebo 1) nebo vypnutý (FALSE, OFF, nebo 0). @OptionValue je varchar(12), bez výchozího nastavení. @OptionValue je necitlivé na velká písmena.

Pro volbu text in row jsou 0platné hodnoty volby , ON, OFF, nebo celé číslo od 24 do .7000 Když je @OptionValue , ONlimit je výchozí 256 bajtů.

Hodnoty návratového kódu

0 (úspěch) nebo chybové číslo (neúspěch).

Poznámky

sp_tableoption lze použít pouze k nastavení volitelných hodnot pro uživatelsky definované tabulky. Pro zobrazení vlastností tabulky použijte OBJECTPROPERTY nebo dotaz sys.tables.

Možnost text v řádku v lze sp_tableoption povolit nebo zakázat pouze v tabulkách obsahujících textové sloupce. Pokud tabulka nemá textový sloupec, SQL Server zobrazí chybu.

Když je povolena možnost text in arrow, parametr @OptionValue umožňuje uživatelům zadat maximální velikost, která má být uložena v řádku pro BLOB. Výchozí hodnota je 256 bajtů, ale hodnoty mohou být od 24 do 7000 bajtů.

Textové, ntextovénebo obrazové řetězce jsou uloženy v datovém řádku, pokud platí následující podmínky:

  • Text v řádku je zapnutý.
  • Délka struny je kratší než limit uvedený v @OptionValue.
  • V datovém řádku je dostatek místa.

Když jsou BLOB řetězce uloženy v datovém řádku, čtení a zápis textu, ntextu nebo obrazových řetězců může být stejně rychlý jako čtení nebo zápis znakových a binárních řetězců. SQL Server nemusí přistupovat k samostatným stránkám, aby mohl číst nebo zapisovat BLOB string.

Pokud je text,ntext nebo obrazový řetězec větší než zadaný limit nebo dostupné místo v řádku, ukazovatele se místo toho ukládají do řádku. Podmínky pro ukládání BLOB řetězců do řádku však platí: v datovém řádku musí být dostatek místa pro uložení ukazatelů.

Řetězce a ukazatele BLOB uložené v řádku tabulky jsou zpracovávány podobně jako řetězce s proměnnou délkou. SQL Server používá pouze tolik bajtů, kolik je potřeba k uložení řetězce nebo ukazatele.

Existující řetězce BLOB nejsou převedeny okamžitě, jakmile je text v řádku poprvé povolen. Řetězce se převádějí pouze při jejich aktualizaci. Stejně tak, když se limit možností textu v řádku zvýší, textové, ntextové nebo obrazové řetězce již v datovém řádku nejsou převedeny tak, aby odpovídaly novému limitu, dokud nejsou aktualizovány.

Poznámka:

Vypnutí textu v řádku nebo snížení limitu této možnosti bude vyžadovat převod všech BLOB; proto může být proces dlouhý v závislosti na počtu řetězců BLOB, které je třeba převést. Stůl je během konverze uzamčen.

Tabulková proměnná, včetně funkce, která vrací tabulkovou proměnnou, má automaticky zapnutou možnost text v řádku s výchozím limitem 256. Tuto možnost nelze změnit.

Volba text in row podporuje funkce TEXTPTR, WRITETEXT, UPDATETEXT a READTEXT. Uživatelé mohou číst části BLOBu pomocí funkce SUBSTRING(), ale musí si uvědomit, že textové ukazatele v řádku mají odlišné časové limity délky a počtu než ostatní textové ukazatele.

Pro změnu tabulky z vardecimálního formátu úložiště zpět na běžný desetinný formát musí být databáze v modelu obnovy SIMPLE. Změna modelu obnovy přeruší řetězec logů pro účely zálohování, proto byste měli vytvořit plnou databázovou zálohu po odstranění vardecimálního formátu úložiště z tabulky.

Pokud převádíte stávající sloupec datového typu LOB (text, ntext nebo obrázek) na malé až střední velké typy (varchar(max),nvarchar(max) nebo varbinary(max)) a většina příkazů neodkazuje na sloupce velkých hodnot ve vašem prostředí, zvažte změnu large_value_types_out_of_row pro 1 optimální výkon. Když se změní hodnota large_value_types_out_of_row opce, stávající hodnoty varchar(max),nvarchar(max), varbinary(max) a xml nejsou okamžitě převedeny. Ukládání řetězců se mění, jak jsou později aktualizovány. Jakékoli nové hodnoty vložené do tabulky jsou uloženy podle platné volby tabulky. Pro okamžité výsledky buď zkopírujte data a poté po změně nastavení large_value_types_out_of_row znovu naplníte tabulku, nebo aktualizujte každý sloupec malých až středně velkých typů hodnot na sebe, aby se změnilo ukládání řetězců s aktivní volbou tabulky. Zvažte přepracování indexů v tabulce po aktualizaci nebo znovuzapopulování pro zhuštění tabulky.

Povolení

K provedení sp_tableoptionALTER je potřeba povolení na stole.

Examples

A. Uložit XML data mimo řádk

Následující příklad specifikuje, že xml data v tabulce HumanResources.JobCandidate musí být uložena mimo řádek.

USE AdventureWorks2022;
GO

EXECUTE sp_tableoption 'HumanResources.JobCandidate', 'large value types out of row', 1;

B. Povolit vardecimální formát ukládání na tabulce

Následující příklad upravuje tabulku Production.WorkOrderRouting tak, aby ukládala desetinný datový typ ve formátu vardecimálního úložiště.

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';