sp_tableoption (Transact-SQL)
Legt Optionswerte für benutzerdefinierte Tabellen fest. sp_tableoption kann verwendet werden, um das Verhalten innerhalb von Tabellenzeilen mithilfe von varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image oder großen benutzerdefinierten Typspalten zu steuern.
Wichtig |
|---|
Die Funktion text in row wird in einer zukünftigen Version von SQL Server entfernt. Zum Speichern von Daten mit umfangreichen Werten wird die Verwendung der Datentypen varchar(max), nvarchar(max) und varbinary(max) empfohlen. |
sp_tableoption kann nur verwendet werden, um die Optionswerte für benutzerdefinierte Tabellen festzulegen. Verwenden Sie OBJECTPROPERTY, um Tabelleneigenschaften anzuzeigen.
Die text in row-Option von sp_tableoption kann nur für Tabellen aktiviert oder deaktiviert werden, die Textspalten enthalten. Wenn die Tabelle nicht über eine Textspalte verfügt, löst SQL Server einen Fehler aus.
Wenn die text in row-Option aktiviert ist, können Benutzer mithilfe des @OptionValue-Parameters die für ein BLOB in einer Zeile zu speichernde Maximalgröße angeben. Der Standardwert ist 256 Bytes. Gültige Werte sind 24 bis 7000 Bytes.
text-, ntext- oder image-Zeichenfolgen werden in der Datenzeile gespeichert, wenn die folgenden Bedingungen erfüllt sind:
text in row ist aktiviert.
Die Länge der Zeichenfolge unterschreitet den in @OptionValue angegebenen Grenzwert.
Es steht genügend Speicherplatz in der Datenzeile zur Verfügung.
Werden BLOB-Zeichenfolgen in der Datenzeile gespeichert, können text-, ntext- oder image-Zeichenfolgen genauso schnell wie Zeichenfolgen und binäre Zeichenfolgen gelesen und geschrieben werden. SQL Server muss nicht auf gesonderte Seiten zugreifen, um die BLOB-Zeichenfolge zu lesen oder zu schreiben.
Wenn eine text-, ntext- oder image-Zeichenfolge den angegebenen Grenzwert oder den verfügbaren Speicherplatz in der Zeile überschreitet, werden anstelle der Zeichenfolge Zeiger in der Zeile gespeichert. 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.
In einer Tabellenzeile gespeicherte BLOB-Zeichenfolgen und Zeiger werden wie Zeichenfolgen mit variabler Länge behandelt. SQL Server verwendet nur so viele Bytes, wie zum Speichern der Zeichenfolge oder des Zeigers benötigt werden.
Vorhandene BLOB-Zeichenfolgen werden nicht sofort konvertiert, wenn text in row aktiviert ist. Die Zeichenfolgen werden erst konvertiert, wenn sie aktualisiert werden. Ebenso werden nach einer Erhöhung des Grenzwerts für die text in row-Option die bereits in der Datenzeile befindlichen text-Zeichenfolgen, ntext-Zeichenfolgen oder image-Zeichenfolgen erst zur Einhaltung des neuen Grenzwerts konvertiert, wenn sie aktualisiert werden.
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 viel Zeit in Anspruch nehmen, je nach der Anzahl der zu konvertierenden BLOB-Zeichenfolgen. Während des Konvertierungsvorgangs ist die Tabelle gesperrt. |
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. Diese Option kann nicht geändert werden.
text in row unterstützt die Funktionen TEXTPTR, WRITETEXT, UPDATETEXT und READTEXT. 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. Weitere Informationen finden Sie unter Verwalten von ntext-, text- und image-Daten.
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. 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.
A. Speichern von XML-Daten außerhalb der Zeile
Im folgenden Beispiel wird angegeben, dass die xml-Daten in der HumanResources.JobCandidate-Tabelle außerhalb von Zeilen gespeichert werden.
USE AdventureWorks2008R2; GO EXEC sp_tableoption 'HumanResources.JobCandidate', 'large value types out of row', 1;
B. Zulassen des vardecimal-Speicherformats für eine Tabelle
Im folgenden Beispiel wird die Production.WorkOrderRouting-Tabelle geändert, um den decimal-Datentyp im vardecimalstorage format zu speichern.
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 'AdventureWorks2008R2', 'ON'; GO USE AdventureWorks2008R2; GO EXEC sp_tableoption 'Production.WorkOrderRouting', 'vardecimal storage format', 'ON';
Wichtig