sp_tableoption (Transact-SQL)sp_tableoption (Transact-SQL)

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL DatabaseAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database

Legt Optionswerte für benutzerdefinierte Tabellen fest.Sets option values for user-defined tables. sp_tableoption kann verwendet werden, um das Verhalten von Tabellen in Zeilen mit Spalten vom Typ varchar (max), nvarchar (max), varbinary (max), XML, Text, ntext, Imageoder große benutzerdefinierte Spalten zu steuern.sp_tableoption can be used to control the in-row behavior of tables with varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image, or large user-defined type columns.

Wichtig

Die Funktion text in row wird in einer zukünftigen Version von SQL ServerSQL Server entfernt.The text in row feature will be removed in a future version of SQL ServerSQL Server. Um Daten mit umfangreichen Werten zu speichern, empfiehlt es sich, die Datentypen varchar (max), nvarchar (max) und varbinary (max) zu verwenden.To store large value data, we recommend that you use of the varchar(max), nvarchar(max) and varbinary(max) data types.

Symbol für Themenlink Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

  
sp_tableoption [ @TableNamePattern = ] 'table'   
     , [ @OptionName = ] 'option_name'   
     ,[ @OptionValue =] 'value'  

ArgumenteArguments

[ @TableNamePattern =] 'Tabelle'[ @TableNamePattern =] 'table'
Der qualifizierte oder nicht qualifizierte Name einer benutzerdefinierten Datenbanktabelle.Is the qualified or nonqualified name of a user-defined database table. Bei Angabe eines voll gekennzeichneten Tabellennamens (einschließlich eines Datenbanknamens) muss der Datenbankname der Name der aktuellen Datenbank sein.If a fully qualified table name, including a database name, is provided, the database name must be the name of the current database. Tabellenoptionen für mehrere Tabellen können nicht gleichzeitig festgelegt werden.Table options for multiple tables can not be set at the same time. Table ist vom Datentyp nvarchar (776) und hat keinen Standardwert.table is nvarchar(776), with no default.

[ @OptionName =] 'option_name'[ @OptionName = ] 'option_name'
Der Name einer Tabellenoption.Is a table option name. option_name ist vom Datentyp varchar (35) und hat den Standardwert NULL.option_name is varchar(35), with no default of NULL. option_name kann einen der folgenden Werte aufweisen.option_name can be one of the following values.

WertValue BESCHREIBUNGDescription
table lock on bulk loadtable lock on bulk load Eine deaktivierte Option (Standard) führt dazu, dass der Massenladevorgang auf benutzerdefinierten Tabellen Zeilensperren erhält.When disabled (the default), it causes the bulk load process on user-defined tables to obtain row locks. Wenn diese Option aktiviert ist, erhalten die Massenladevorgänge auf benutzerdefinierten Tabellen eine Massenupdatesperre.When enabled, it causes the bulk load processes on user-defined tables to obtain a bulk update lock.
insert row lockinsert row lock Wird nicht mehr unterstützt.No longer supported.

Diese Option wirkt sich nicht auf das Sperrverhalten von SQL ServerSQL Server aus und ist nur aus Gründen der Kompatibilität mit vorhandenen Skripts und Prozeduren enthalten.This option has no effect on the locking behavior of SQL ServerSQL Server and is included only for compatibility of existing scripts and procedures.
text in rowtext in row Beim Wert OFF oder 0 (deaktivierte Option, Standard) wird das aktuelle Verhalten nicht geändert, und es gibt keine BLOBs in Zeilen.When OFF or 0 (disabled, the default), it does not change current behavior, and there is no BLOB in row.

Wenn angegeben und @OptionValue auf on (aktiviert) oder einen ganzzahligen Wert von 24 bis 7000, werden neue Text-, ntext-oder Image -Zeichen folgen direkt in der Daten Zeile gespeichert.When specified and @OptionValue is ON (enabled) or an integer value from 24 through 7000, new text, ntext, or image strings are stored directly in the data row. Alle vorhandenen BLOB-Daten (Binary Large Object: Text, ntextoder Image ) werden in das Format Text in row geändert, wenn der BLOB-Wert aktualisiert wird.All existing BLOB (binary large object: text, ntext, or image data) will be changed to text in row format when the BLOB value is updated. Weitere Informationen finden Sie in den Hinweisen.For more information, see Remarks.
LARGE VALUE TYPES OUT OF ROWlarge value types out of row 1 = varchar (max), nvarchar (max), varbinary (max), XML und große benutzerdefinierte Typen (User-Defined Type, UDT) in der Tabelle werden außerhalb der Zeile gespeichert, mit einem 16-Byte-Zeiger auf den Stamm.1 = varchar(max), nvarchar(max), varbinary(max), xml and large user-defined type (UDT) columns in the table are stored out of row, with a 16-byte pointer to the root.

0 = varchar (max), nvarchar (max), varbinary (max), XML und große UDT-Werte werden direkt in der Daten Zeile gespeichert, bis zu einem Limit von 8000 Bytes, und solange der Wert in den Datensatz passt.0 = varchar(max), nvarchar(max), varbinary(max), xml and large UDT values are stored directly in the data row, up to a limit of 8000 bytes and as long as the value can fit in the record. Überschreitet der Wert die Größe des Datensatzes, wird ein Zeiger innerhalb der Zeilen gespeichert, während der Rest außerhalb der Zeilen im LOB-Speicherbereich gespeichert wird.If the value does not fit in the record, a pointer is stored in-row and the rest is stored out of row in the LOB storage space. Der Standardwert ist 0 (null).0 is the default value.

Großer benutzerdefinierter Typ (User-Defined Type, UDT) gilt für: SQL Server 2008SQL Server 2008 und höher.Large user-defined type (UDT) applies to: SQL Server 2008SQL Server 2008 and later.

Verwenden Sie die Option TEXTIMAGE_ON von CREATE TABLE , um einen Speicherort für die Speicherung großer Datentypen anzugeben.Use the TEXTIMAGE_ON option of CREATE TABLE to specify a location for storage of large data types.
vardecimal-Speicherformatvardecimal storage format Gilt für: SQL Server 2008SQL Server 2008 und höher.Applies to: SQL Server 2008SQL Server 2008 and later.

Bei TRUE, ON oder 1 ist die festgelegte Tabelle für das vardecimal-Speicherformat aktiviert.When TRUE, ON, or 1, the designated table is enabled for vardecimal storage format. Bei FALSE, OFF oder 0 ist die Tabelle für das vardecimal-Speicherformat nicht aktiviert.When FALSE, OFF, or 0, the table is not enabled for vardecimal storage format. Das vardecimal--Speicherformat kann nur aktiviert werden, wenn die Datenbank mit sp_db_vardecimal_storage_formatfür das vardecimal--Speicherformat aktiviert wurde.Vardecimal storage format can be enabled only when the database has been enabled for vardecimal storage format by using sp_db_vardecimal_storage_format. In SQL Server 2008SQL Server 2008 und höheren Versionen ist das vardecimal- -Speicherformat veraltet.In SQL Server 2008SQL Server 2008 and later, vardecimal storage format is deprecated. Verwenden Sie stattdessen die ROW-Komprimierung.Use ROW compression instead. Weitere Informationen finden Sie unter Data Compression.For more information, see Data Compression. Der Standardwert ist 0 (null).0 is the default value.

[ @OptionValue =] 'Wert'[ @OptionValue =] 'value'
Gibt an, ob der option_name aktiviert (true, on oder 1) oder deaktiviert (false, Off oder 0) ist.Is whether the option_name is enabled (TRUE, ON, or 1) or disabled (FALSE, OFF, or 0). der Wert ist vom Datentyp varchar (12) und hat keinen Standard Wert .value is varchar(12), with no default. beim Wert wird Groß-/Kleinschreibungvalue is case insensitive.

Gültige Werte für die text in row-Option sind: 0, ON, OFF oder eine Ganzzahl zwischen 24 und 7000.For the text in row option, valid option values are 0, ON, OFF, or an integer from 24 through 7000. Wenn value auf on gesetzt ist, lautet der Standardwert 256 Bytes.When value is ON, the limit defaults to 256 bytes.

RückgabecodewerteReturn Code Values

0 (Erfolg) oder eine Fehlernummer (Fehler)0 (success) or error number (failure)

HinweiseRemarks

sp_tableoption kann nur verwendet werden, um die Optionswerte für benutzerdefinierte Tabellen festzulegen.sp_tableoption can be used only to set option values for user-defined tables. Verwenden Sie OBJECTPROPERTY, oder führen Sie die Abfrage sys. Tables aus, um Tabellen Eigenschaften anzuzeigen.To display table properties, use OBJECTPROPERTY or query sys.tables.

Die text in row-Option von sp_tableoption kann nur für Tabellen aktiviert oder deaktiviert werden, die Textspalten enthalten.The text in row option in sp_tableoption can be enabled or disabled only on tables that contain text columns. Wenn die Tabelle nicht über eine Textspalte verfügt, löst SQL ServerSQL Server einen Fehler aus.If the table does not have a text column, SQL ServerSQL Server raises an error.

Wenn die Text in row-Option aktiviert ist, @OptionValue können Benutzer mit dem-Parameter die maximale Größe angeben, die in einer Zeile für ein BLOB gespeichert werden soll.When the text in row option is enabled, the @OptionValue parameter allows users to specify the maximum size to be stored in a row for a BLOB. Der Standardwert ist 256 Bytes. Gültige Werte sind 24 bis 7000 Bytes.The default is 256 bytes, but values can range from 24 through 7000 bytes.

Text-, ntext-oder Image -Zeichen folgen werden in der Daten Zeile gespeichert, wenn die folgenden Bedingungen zutreffen:text, ntext, or image strings are stored in the data row if the following conditions apply:

  • text in row ist aktiviert.text in row is enabled.

  • Die Länge der Zeichenfolge ist kürzer als die in angegebene Grenze. @OptionValueThe length of the string is shorter than the limit specified in @OptionValue

  • Es steht genügend Speicherplatz in der Datenzeile zur Verfügung.There is enough space available in the data row.

Wenn BLOB-Zeichen folgen in der Daten Zeile gespeichert werden, kann das Lesen und Schreiben von Text-, ntext-oder Image -Zeichen folgen so schnell wie das Lesen oder Schreiben von Zeichen-und Binär Zeichenfolgen sein.When BLOB strings are stored in the data row, reading and writing the text, ntext, or image strings can be as fast as reading or writing character and binary strings. SQL ServerSQL Server kann nicht auf separate Seiten zugreifen, um die BLOB-Zeichenfolge zu lesen oder zu schreiben.does not have to access separate pages to read or write the BLOB string.

Wenn eine Text-, ntext-oder Image -Zeichenfolge größer ist als die angegebene Grenze oder der verfügbare Speicherplatz in der Zeile, werden Zeiger stattdessen in der Zeile gespeichert.If a text, ntext, or image string is larger than the specified limit or the available space in the row, pointers are stored in the row instead. Die Bedingungen zum Speichern der BLOB-Zeichenfolgen sind jedoch trotzdem gültig: Für die Zeiger muss genügend Speicherplatz in der Datenzeile vorhanden sein.The conditions for storing the BLOB strings in the row nonetheless apply: There must be enough space in the data row to hold the pointers.

BLOB-Zeichenfolgen und -Zeiger, die in der Zeile einer Tabelle gespeichert werden, werden ähnlich wie Zeichenfolgen mit variabler Länge behandelt.BLOB strings and pointers stored in the row of a table are treated similarly to variable-length strings. SQL ServerSQL Server verwendet nur so viele Bytes, wie erforderlich sind, um die Zeichenfolge oder den Zeiger zu speichern.uses only the number of bytes required to store the string or the pointer.

Vorhandene BLOB-Zeichenfolgen werden nicht sofort konvertiert, wenn text in row aktiviert ist.Existing BLOB strings are not converted immediately when text in row is first enabled. Die Zeichenfolgen werden erst konvertiert, wenn sie aktualisiert werden.The strings are converted only when they are updated. Wenn der Grenzwert für Text in row-Optionen zunimmt, werden die Text-, ntext-oder Image -Zeichen folgen, die sich bereits in der Daten Zeile befinden, nicht konvertiert, um den neuen Grenzwert bis zum Aktualisierungs Zeitpunkt einzuhalten.Likewise, when the text in row option limit is increased, the text, ntext, or image strings already in the data row will not be converted to adhere to the new limit until the time they are updated.

Hinweis

Wenn die text in row-Option deaktiviert oder der Grenzwert für diese Option verringert wird, müssen alle BLOBs konvertiert werden. Dieser Vorgang kann je nach der Anzahl der zu konvertierenden BLOB-Zeichenfolgen viel Zeit in Anspruch nehmen.Disabling the text in row option or reducing the limit of the option will require the conversion of all BLOBs; therefore, the process can be long, depending on the number of BLOB strings that must be converted. Während des Konvertierungsvorgangs ist die Tabelle gesperrt.The table is locked during the conversion process.

Für eine Tabellenvariable sowie eine Funktion, die eine Tabellenvariable zurückgibt, ist die text in row-Option automatisch mit dem inline limit-Standardwert von 256 aktiviert.A table variable, including a function that returns a table variable, automatically has the text in row option enabled with a default inline limit of 256. Diese Option kann nicht geändert werden.This option cannot be changed.

Die Option text in row unterstützt die Funktionen TEXTPTR, WRITETEXT, UPDATETEXT und READTEXT.The text in row option supports the TEXTPTR, WRITETEXT, UPDATETEXT, and READTEXT functions. Benutzer können Teile eines BLOBs mit der SUBSTRING()-Funktion lesen, sollten jedoch berücksichtigen, dass Textzeiger in Zeilen andere Grenzwerte für Dauer und Anzahl haben als andere Textzeiger.Users can read parts of a BLOB with the SUBSTRING() function, but must remember that in-row text pointers have different duration and number limits from other text pointers.

Wenn Sie eine Tabelle vom vardecimal-Speicherformat zurück in das normale decimal-Speicherformat konvertieren möchten, muss sich die Datenbank im SIMPLE-Wiederherstellungsmodus befinden.To change a table from vardecimal storage format back to the normal decimal storage format, the database must be in SIMPLE recovery mode. Durch das Ändern des Wiederherstellungsmodus wird die Protokollkette für Sicherungszwecke unterbrochen. Daher sollten Sie eine vollständige Datenbanksicherung erstellen, nachdem Sie das vardecimal-Speicherformat aus einer Tabelle entfernt haben.Changing the recovery mode will break the log chain for backup purposes, therefore you should create a full database backup after removing the vardecimal storage format from a table.

Wenn Sie eine vorhandene LOB-Datentyp Spalte (Text, ntext oder Image) in kleine bis mittlere große Werttypen (varchar (max), nvarchar (max) oder varbinary (max)) ändern und die meisten Anweisungen nicht auf die Spalten mit großen Werttypen in Ihrer Umgebung verweisen, sollten Sie large_value_types_out_of_row in 1 ändern, um eine optimale Leistung zu erzielen.If you are converting an existing LOB data type column (text, ntext, or image) to small-to-medium large value types (varchar(max), nvarchar(max), or varbinary(max)), and most statements do not reference the large value type columns in your environment, consider changing large_value_types_out_of_row to 1 to gain optimal performance. Wenn der Wert der large_value_types_out_of_row Option geändert wird, werden die vorhandenen Werte varchar (max), nvarchar (max), varbinary (max) und XML nicht sofort konvertiert.When the large_value_types_out_of_row option value is changed, existing varchar(max), nvarchar(max), varbinary(max), and xml values are not immediately converted. Der Speicherung der Zeichenfolgen ändert sich, wenn diese anschließend aktualisiert werden.The storage of the strings is changed as they are subsequently updated. Alle neuen Werte, die in eine Tabelle eingefügt werden, werden gemäß der aktivierten Tabellenoption gespeichert.Any new values inserted into a table are stored according to the table option in effect. Erstellen Sie für unmittelbare Ergebnisse entweder eine Kopie der Daten, und füllen Sie dann die Tabelle erneut aus, nachdem Sie die large_value_types_out_of_row Einstellung geändert haben, oder aktualisieren Sie jede kleine bis mittlere Spalte mit großen Werttypen auf sich selbst, damit die Speicherung der Zeichen folgen mit der gültigen Tabellen Option geändert wird.For immediate results, either make a copy of the data and then repopulate the table after changing the large_value_types_out_of_row setting or update each small-to-medium large value types column to itself so that the storage of the strings is changed with the table option in effect. Erstellen Sie die Indizes für die Tabelle nach der Aktualisierung oder Neuauffüllung neu, um die Tabelle zu komprimieren.Consider rebuilding the indexes on the table after the update or repopulation to condense the table.

BerechtigungenPermissions

Für die Ausführung von sp_tableoption ist die ALTER-Berechtigung für die Tabelle erforderlich.To execute sp_tableoption requires ALTER permission on the table.

BeispieleExamples

A.A. Speichern von XML-Daten außerhalb der ZeileStoring xml data out of the row

Im folgenden Beispiel wird angegeben, dass die XML -Daten in der HumanResources.JobCandidate Tabelle außerhalb der Zeile gespeichert werden.The following example specifies that the xml data in the HumanResources.JobCandidate table be stored out of row.

USE AdventureWorks2012;  
GO  
EXEC sp_tableoption 'HumanResources.JobCandidate', 'large value types out of row', 1;  

B.B. Aktivieren des vardecimal-Speicherformats für eine TabelleEnabling vardecimal storage format on a table

Im folgenden Beispiel wird die- Production.WorkOrderRouting Tabelle so geändert, dass der- decimal Datentyp im vardecimal Speicherformat gespeichert wird.The following example modifies the Production.WorkOrderRouting table to store the decimal data type in the vardecimal storage format.

USE master;  
GO  
-- The database must be enabled for vardecimal storage format  
-- before a table can be enabled for vardecimal storage format  
EXEC sp_db_vardecimal_storage_format 'AdventureWorks2012', 'ON';  
GO  
USE AdventureWorks2012;  
GO  
EXEC sp_tableoption 'Production.WorkOrderRouting',   
   'vardecimal storage format', 'ON';  

Weitere InformationenSee Also

sys.tables (Transact-SQL) sys.tables (Transact-SQL)
OBJECTPROPERTY (Transact-SQL) OBJECTPROPERTY (Transact-SQL)
Gespeicherte Systemprozeduren (Transact-SQL) System Stored Procedures (Transact-SQL)
Datenbank-Engine gespeicherter Prozeduren (Transact-SQL-)Database Engine Stored Procedures (Transact-SQL)