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

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure noAzure SQL Data Warehouse noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Imposta i valori delle opzioni per le tabelle definite dall'utente.Sets option values for user-defined tables. Per controllare il comportamento all'interno delle righe di tabelle in cui è possibile utilizzare sp_tableoption varchar (max) , nvarchar (max) , varbinary (max) , xml, testo, ntext, immagine, o le colonne di tipo definito dall'utente di grandi dimensioni.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.

Importante

La caratteristica text in row verrà rimossa nelle versioni future di SQL ServerSQL Server.The text in row feature will be removed in a future version of SQL ServerSQL Server. Per archiviare dati per valori di grandi dimensioni, si consiglia di usare la varchar (max) , nvarchar (max) e varbinary (max) i tipi di dati.To store large value data, we recommend that you use of the varchar(max), nvarchar(max) and varbinary(max) data types.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

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

ArgomentiArguments

[ @TableNamePattern =] 'tabella'[ @TableNamePattern =] 'table'
Nome completo o non qualificato di una tabella di database definita dall'utente.Is the qualified or nonqualified name of a user-defined database table. Nel caso di un nome qualificato di tabella, ovvero contenente un nome di database, il nome del database deve corrispondere a quello del database corrente.If a fully qualified table name, including a database name, is provided, the database name must be the name of the current database. Non è possibile configurare le opzioni tabella per più tabelle contemporaneamente.Table options for multiple tables can not be set at the same time. Nella tabella viene nvarchar(776) , non prevede alcun valore predefinito.table is nvarchar(776), with no default.

[ @OptionName =] 'option_name'[ @OptionName = ] 'option_name'
Nome di un'opzione di tabella.Is a table option name. option_name viene varchar(35, non prevede alcun valore predefinito null.option_name is varchar(35), with no default of NULL. option_name può essere uno dei valori seguenti.option_name can be one of the following values.

ValueValue DescrizioneDescription
table lock on bulk loadtable lock on bulk load Quando questa opzione è disabilitata (impostazione predefinita), durante il processo di caricamento bulk nelle tabelle definite dall'utente vengono acquisiti blocchi di riga.When disabled (the default), it causes the bulk load process on user-defined tables to obtain row locks. Se abilitata, viene acquisito un blocco di tipo aggiornamento bulk.When enabled, it causes the bulk load processes on user-defined tables to obtain a bulk update lock.
insert row lockinsert row lock Non più supportata.No longer supported.

Questa opzione non influisce sulla funzionalità di blocco di SQL ServerSQL Server ed è disponibile solo per compatibilità con script e procedure esistenti.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 Quando questa opzione è disabilitata, ovvero impostata su OFF o 0 (impostazione predefinita), il funzionamento corrente rimane invariato e la riga non contiene valori BLOB.When OFF or 0 (disabled, the default), it does not change current behavior, and there is no BLOB in row.

Quando specificato e @OptionValue è impostata su ON (abilitata) oppure un valore intero compreso tra 24 e 7000, le nuove testo, ntext, oppure immagine le stringhe vengono archiviate direttamente nella riga di dati.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. Tutti i valori esistenti BLOB (oggetto binario di grandi dimensioni: testo, ntext, o immagine dati) verrà modificato in formato text in row quando viene aggiornato il valore BLOB.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. Per altre informazioni, vedere la sezione Osservazioni.For more information, see Remarks.
large value types out of rowlarge value types out of row 1 = varchar (max) , nvarchar (max) , varbinary (max) , xml e colonne di grandi dimensioni tipo definito dall'utente (UDT) nella tabella vengono archiviate all'esterno delle righe, con un puntatore di 16 byte all'elemento radice.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 e valori UDT di grandi dimensioni vengono archiviati direttamente nella riga di dati, con un limite massimo di 8000 byte e a condizione che il valore può essere contenuti nel record.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. Se le dimensioni del record non sono sufficienti per il valore, all'interno della riga viene archiviato un puntatore e i dati restanti vengono archiviati all'esterno della riga nello spazio di archiviazione LOB.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. Il valore predefinito è 0.0 is the default value.

Il tipo definito dall'utente (UDT) di grandi dimensioni si applica a: SQL Server 2008SQL Server 2008 - SQL Server 2017SQL Server 2017.Large user-defined type (UDT) applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Utilizzare l'opzione TEXTIMAGE_ON del CREATE TABLE per specificare un percorso per l'archiviazione dei tipi di dati di grandi dimensioni.Use the TEXTIMAGE_ON option of CREATE TABLE to specify a location for storage of large data types.
formato di archiviazione vardecimalvardecimal storage format Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Se TRUE, ON o 1, la tabella designata è abilitata per il formato di archiviazione vardecimal.When TRUE, ON, or 1, the designated table is enabled for vardecimal storage format. Se FALSE, OFF o 0, il formato di archiviazione vardecimal non è abilitato per la tabella.When FALSE, OFF, or 0, the table is not enabled for vardecimal storage format. Formato di archiviazione vardecimal può essere abilitato solo quando il database abilitato per il formato di archiviazione vardecimal utilizzando sp_db_vardecimal_storage_format.Vardecimal storage format can be enabled only when the database has been enabled for vardecimal storage format by using sp_db_vardecimal_storage_format. Nelle SQL Server 2008SQL Server 2008 e versioni successive vardecimal il formato di archiviazione è deprecato.In SQL Server 2008SQL Server 2008 and later, vardecimal storage format is deprecated. ed è necessario usare il tipo di compressione ROW.Use ROW compression instead. Per altre informazioni, vedere Data Compression.For more information, see Data Compression. Il valore predefinito è 0.0 is the default value.

[ @OptionValue =] 'valore'[ @OptionValue =] 'value'
È se il option_name è abilitata (TRUE, ON o 1) oppure disabilitata (FALSE, OFF o 0).Is whether the option_name is enabled (TRUE, ON, or 1) or disabled (FALSE, OFF, or 0). valore viene varchar(12) , non prevede alcun valore predefinito.value is varchar(12), with no default. valore viene operata la distinzione.value is case insensitive.

Per l'opzione text in row, i valori dell'opzione validi sono 0, ON, OFF o un numero intero compreso tra 24 e 7000.For the text in row option, valid option values are 0, ON, OFF, or an integer from 24 through 7000. Quando valore è impostata su ON, le impostazioni predefinite di limite di 256 byte.When value is ON, the limit defaults to 256 bytes.

Valori restituitiReturn Code Values

0 (esito positivo) o numero di errore (esito negativo)0 (success) or error number (failure)

NoteRemarks

La stored procedure sp_tableoption può essere utilizzata solo per impostare i valori delle opzioni per le tabelle definite dall'utente.sp_tableoption can be used only to set option values for user-defined tables. Per visualizzare le proprietà della tabella, usare OBJECTPROPERTY.To display table properties, use OBJECTPROPERTY.

In sp_tableoption è possibile abilitare o disabilitare l'opzione text in row solo in tabelle contenenti colonne di testo.The text in row option in sp_tableoption can be enabled or disabled only on tables that contain text columns. Nel caso di tabelle prive di colonne di questo tipo, SQL ServerSQL Server genera un errore.If the table does not have a text column, SQL ServerSQL Server raises an error.

Quando l'opzione text in row è abilitata, il @OptionValue parametro consente agli utenti di specificare le dimensioni massime devono essere archiviati in una riga per un BLOB.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. I possibili valori sono compresi tra 24 e 7000 byte. Il valore predefinito è 256 byte.The default is 256 bytes, but values can range from 24 through 7000 bytes.

testo, ntext, o immagine le stringhe vengono archiviate nella riga di dati se si verificano le condizioni seguenti:text, ntext, or image strings are stored in the data row if the following conditions apply:

  • L'opzione text in row è abilitata.text in row is enabled.

  • La lunghezza della stringa è più breve rispetto al limite specificato in @OptionValueThe length of the string is shorter than the limit specified in @OptionValue

  • Nella riga di dati lo spazio disponibile è sufficiente.There is enough space available in the data row.

Quando si archiviano stringhe BLOB nella riga di dati, la lettura e scrittura i testo, ntext, o immagine stringhe possono essere il più veloce la lettura o scrittura di stringhe di caratteri e binarie.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 non accede a pagine separate per la lettura o scrittura di stringhe BLOB.does not have to access separate pages to read or write the BLOB string.

Se un testo, ntext, o immagine stringa è maggiore del limite specificato o lo spazio disponibile nella riga, i puntatori vengono archiviati nella riga invece.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. Le condizioni per l'archiviazione delle stringhe BLOB nella riga devono comunque essere soddisfatte: Deve esserci spazio sufficiente nella riga di dati per includervi i puntatori.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.

Le stringhe e i puntatori BLOB archiviati nella riga di una tabella vengono gestiti in modo analogo alle stringhe a lunghezza variabile,BLOB strings and pointers stored in the row of a table are treated similarly to variable-length strings. ovvero SQL ServerSQL Server utilizza solo il numero di byte necessari per l'archiviazione della stringa o del puntatore.SQL ServerSQL Server uses only the number of bytes required to store the string or the pointer.

Quando si abilita l'opzione text in row per la prima volta, le stringhe BLOB esistenti non vengono convertite immediatamente,Existing BLOB strings are not converted immediately when text in row is first enabled. ma solo in fase di aggiornamento.The strings are converted only when they are updated. Analogamente, quando il testo nel limite dell'opzione riga viene aumentato, il testo, ntext, o immagine stringhe già nella riga di dati non verranno convertite al fine di rispettare il limite fino al successivo aggiornamento.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.

Nota

Per disabilitare l'opzione text in row o ridurne il valore limite, è necessario convertire tutti i valori BLOB. L'operazione può pertanto richiedere tempi lunghi, a seconda del numero di stringhe BLOB da convertire.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. Durante il processo di conversione la tabella viene bloccata.The table is locked during the conversion process.

Per una variabile di tabella, così come per una funzione che restituisce una variabile di tabella, l'opzione text in row viene abilitata automaticamente con il valore predefinito 256 per il parametro inline limit.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. Questa opzione non può essere modificata.This option cannot be changed.

L'opzione text in row supporta le funzioni TEXTPTR, WRITETEXT, UPDATETEXT e READTEXT.The text in row option supports the TEXTPTR, WRITETEXT, UPDATETEXT, and READTEXT functions. Gli utenti possono leggere parti di un valore BLOB tramite la funzione SUBSTRING(). È importante sottolineare, tuttavia, che i limiti massimi relativi a durata e numero per i puntatori di testo all'interno di righe sono diversi da quelli degli altri puntatori di testo.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.

Per modificare di nuovo il formato di archiviazione di una tabella da vardecimal a decimal, è necessario che per il database sia impostata la modalità di recupero SIMPLE.To change a table from vardecimal storage format back to the normal decimal storage format, the database must be in SIMPLE recovery mode. La modifica della modalità di recupero causa l'interruzione della catena di log per il backup. Dopo la rimozione del formato di archiviazione vardecimal da una tabella è pertanto necessario creare un backup completo del database.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.

Se si sta convertendo un'esistente LOB colonna tipo di dati (text, ntext o image) in tipi di valori di grandi dimensioni piccoli a medi (varchar (max), nvarchar (max), o varbinary e la maggior parte delle istruzioni non fanno riferimento le colonne di tipo di valori di grandi dimensioni nell'ambiente in uso, prendere in considerazione modificando large_value_types_out_of_row al 1 per ottenere prestazioni ottimali.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. Quando la large_value_types_out_of_row opzione valore viene modificato, esistenti varchar (max), nvarchar (max), varbinary (max), e i valori xml non vengono convertiti immediatamente.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. L'archiviazione delle stringhe viene modificata nel corso del successivo aggiornamento.The storage of the strings is changed as they are subsequently updated. Qualsiasi nuovo valore inserito in una tabella viene archiviato in base all'opzione di tabella attiva.Any new values inserted into a table are stored according to the table option in effect. Per risultati immediati, creare una copia dei dati e quindi ripopolare la tabella dopo aver modificato il large_value_types_out_of_row impostazione o aggiornare ciascuna colonna di tipi di valori di grandi dimensioni piccole e medie a se stesso in modo che lo spazio di archiviazione del le stringhe viene modificato con l'opzione di tabella in vigore.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. Provare a ricompilare gli indici nella tabella dopo l'aggiornamento o il ripopolamento per ridurre la tabella.Consider rebuilding the indexes on the table after the update or repopulation to condense the table.

PermissionsPermissions

Per l'esecuzione di sp_tableoption è richiesta l'autorizzazione ALTER per la tabella.To execute sp_tableoption requires ALTER permission on the table.

EsempiExamples

R.A. Archiviazione di dati xml all'esterno delle righeStoring xml data out of the row

Nell'esempio seguente specifica che il xml i dati nel HumanResources.JobCandidate tabella archiviati all'esterno delle righe.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. Abilitazione del formato di archiviazione vardecimal in una tabellaEnabling vardecimal storage format on a table

Nell'esempio seguente viene modificato il Production.WorkOrderRouting tabella per archiviare il decimal tipo di dati di vardecimal il formato di archiviazione.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';  

Vedere ancheSee Also

sys.tables (Transact-SQL) sys.tables (Transact-SQL)
OBJECTPROPERTY (Transact-SQL) OBJECTPROPERTY (Transact-SQL)
Stored procedure di sistema (Transact-SQL) System Stored Procedures (Transact-SQL)
Motore di database le Stored procedure (Transact-SQL)Database Engine Stored Procedures (Transact-SQL)