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

적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

사용자 정의 테이블의 옵션 값을 설정합니다.Sets option values for user-defined tables. sp_tableoption를 사용 하 여 varchar (max), nvarchar (max), varbinary (max), xml, text, ntext, image또는 large 사용자 정의 형식 열이 있는 테이블의 행 내부 동작을 제어할 수 있습니다.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.

중요

SQL ServerSQL Server의 이후 버전에서는 text in row 기능이 제거됩니다.The text in row feature will be removed in a future version of SQL ServerSQL Server. 대량 값 데이터를 저장 하려면 varchar (max), nvarchar (max)varbinary (max) 데이터 형식을 사용 하는 것이 좋습니다.To store large value data, we recommend that you use of the varchar(max), nvarchar(max) and varbinary(max) data types.

항목 링크 아이콘 Transact-SQL 구문 표기 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

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

인수Arguments

[ @TableNamePattern =] '테이블'[ @TableNamePattern =] 'table'
사용자 정의 데이터베이스 테이블의 정규화 또는 비정규화된 이름입니다.Is the qualified or nonqualified name of a user-defined database table. 데이터베이스 이름을 포함한 정규화된 테이블 이름인 경우 데이터베이스 이름이 반드시 현재 데이터베이스의 이름이어야 합니다.If a fully qualified table name, including a database name, is provided, the database name must be the name of the current database. 여러 테이블에 대한 테이블 옵션을 동시에 설정할 수 없습니다.Table options for multiple tables can not be set at the same time. 테이블nvarchar (776) 이며 기본값은 없습니다.table is nvarchar(776), with no default.

[ @OptionName =] 'option_name'[ @OptionName = ] 'option_name'
테이블 옵션 이름입니다.Is a table option name. option_namevarchar (35) 이며 기본값은 NULL이 아닙니다.option_name is varchar(35), with no default of NULL. option_name 는 다음 값 중 하나일 수 있습니다.option_name can be one of the following values.

Value DescriptionDescription
table lock on bulk loadtable lock on bulk load 기본값이 해제되면 사용자 정의 테이블에 대량 로드 처리를 수행하여 행 잠금을 얻습니다.When disabled (the default), it causes the bulk load process on user-defined tables to obtain row locks. 기본값이 설정되면 사용자 정의 테이블에 대량 로드 처리를 수행하여 대량 업데이트 잠금을 얻습니다.When enabled, it causes the bulk load processes on user-defined tables to obtain a bulk update lock.
insert row lockinsert row lock 더 이상 지원되지 않습니다.No longer supported.

이 옵션은 SQL ServerSQL Server의 잠금 동작에 영향을 주지 않으며 기존 스크립트 및 프로시저와의 호환성을 위해 포함됩니다.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 OFF 또는 0(해제, 기본값)이면 현재 동작을 바꾸지 않으며 행에 BLOB이 없습니다.When OFF or 0 (disabled, the default), it does not change current behavior, and there is no BLOB in row.

지정 된 경우 @OptionValue (enabled) 또는 24에서 7000 사이의 정수 값을 지정 하면 새 text, ntext또는 image 문자열이 데이터 행에 직접 저장 됩니다.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. BLOB 값이 업데이트 될 때 기존의 모든 BLOB (binary large object: text, ntext또는 image 데이터)는 text in row 형식으로 변경 됩니다.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. 자세한 내용은 설명 부분을 참조하세요.For more information, see Remarks.
large value types out of rowlarge value types out of row 1 = varchar (max), nvarchar (max), varbinary (max), xml 및 초대형 UDT (사용자 정의 형식) 열은 루트에 대 한 16 바이트 포인터와 함께 행 외부에 저장 됩니다.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 및 large UDT 값은 최대 8000 바이트까지 데이터 행에 직접 저장 되며, 값이 레코드에 맞을 수 있습니다.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. 값이 레코드에 맞지 않으면 포인터는 행 내부에 저장되고 나머지는 행 외부 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. 0이 기본값입니다.0 is the default value.

Large UDT (사용자 정의 형식)는 이상에 적용 됩니다. SQL Server 2008SQL Server 2008Large user-defined type (UDT) applies to: SQL Server 2008SQL Server 2008 and later.

CREATE TABLE 의 TEXTIMAGE_ON 옵션을 사용 하 여 대량 데이터 형식의 저장소 위치를 지정할 수 있습니다.Use the TEXTIMAGE_ON option of CREATE TABLE to specify a location for storage of large data types.
vardecimal storage formatvardecimal storage format 적용 대상: SQL Server 2008SQL Server 2008 이상Applies to: SQL Server 2008SQL Server 2008 and later.

TRUE, ON 또는 1이면 지정된 테이블을 VarDecimal 스토리지 형식에 사용할 수 있습니다.When TRUE, ON, or 1, the designated table is enabled for vardecimal storage format. FALSE, OFF 또는 0이면 지정된 테이블을 VarDecimal 스토리지 형식에 사용할 수 없습니다.When FALSE, OFF, or 0, the table is not enabled for vardecimal storage format. Vardecimal 저장소 형식은 sp_db_vardecimal_storage_format를 사용 하 여 데이터베이스에서 vardecimal 저장소 형식을 사용 하도록 설정한 경우에만 사용할 수 있습니다.Vardecimal storage format can be enabled only when the database has been enabled for vardecimal storage format by using sp_db_vardecimal_storage_format. SQL Server 2008SQL Server 2008이상에서 vardecimal 저장소 형식은 더 이상 사용 되지 않습니다.In SQL Server 2008SQL Server 2008 and later, vardecimal storage format is deprecated. 대신 ROW 압축을 사용하세요.Use ROW compression instead. 자세한 내용은 Data Compression을 참조하세요.For more information, see Data Compression. 0이 기본값입니다.0 is the default value.

[ @OptionValue =] 'value'[ @OptionValue =] 'value'
Option_name 사용 (TRUE, ON 또는 1) 또는 해제 (FALSE, OFF 또는 0) 인지 여부입니다.Is whether the option_name is enabled (TRUE, ON, or 1) or disabled (FALSE, OFF, or 0). varchar (12) 이며 기본값은 없습니다.value is varchar(12), with no default. 은 대/소문자를 구분 하지 않습니다.value is case insensitive.

유효한 text in row 옵션 값은 0, ON, OFF 또는 24에서 7000까지의 정수입니다.For the text in row option, valid option values are 0, ON, OFF, or an integer from 24 through 7000. 을 ON으로 설정 하면 기본적으로 256 바이트로 제한 됩니다.When value is ON, the limit defaults to 256 bytes.

반환 코드 값Return Code Values

0(성공) 또는 오류 번호(실패)0 (success) or error number (failure)

설명Remarks

sp_tableoption은 사용자 정의 테이블의 옵션 값을 설정할 때만 사용합니다.sp_tableoption can be used only to set option values for user-defined tables. 테이블 속성을 표시 하려면 OBJECTPROPERTY 또는 query sys.debug를 사용 합니다.To display table properties, use OBJECTPROPERTY or query sys.tables.

sp_tableoption의 text in row 옵션은 텍스트 열을 포함하는 테이블에서만 설정 또는 해제될 수 있습니다.The text in row option in sp_tableoption can be enabled or disabled only on tables that contain text columns. 테이블에 텍스트 열이 없으면 SQL ServerSQL Server에서 오류가 발생합니다.If the table does not have a text column, SQL ServerSQL Server raises an error.

Text in row 옵션을 설정 하면 @OptionValue 사용자가이 매개 변수를 사용 하 여 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. 기본값은 256바이트이며 24에서 7000바이트까지의 범위에서 값을 지정할 수 있습니다.The default is 256 bytes, but values can range from 24 through 7000 bytes.

text, ntext또는 image 문자열은 다음 조건이 적용 되는 경우 데이터 행에 저장 됩니다.text, ntext, or image strings are stored in the data row if the following conditions apply:

  • text in row가 설정된 경우text in row is enabled.

  • 문자열의 길이가에 지정 된 제한 보다 짧은 경우 @OptionValueThe length of the string is shorter than the limit specified in @OptionValue

  • 데이터 행에 사용할 수 있는 충분한 공간이 있을 경우There is enough space available in the data row.

BLOB 문자열이 데이터 행에 저장 된 경우 text, ntext또는 image 문자열을 읽고 쓰는 것은 문자와 이진 문자열을 읽거나 쓰는 것 만큼 빠를 수 있습니다.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에서는 BLOB 문자열을 읽거나 쓰기 위해 별도의 페이지에 액세스할 필요가 없습니다.does not have to access separate pages to read or write the BLOB string.

Text, ntext또는 image 문자열이 행에서 지정 된 제한 또는 사용 가능한 공간 보다 큰 경우에는 포인터가 행에 대신 저장 됩니다.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. 하지만 이 경우에도 행에 BLOB 문자열을 저장하기 위한 조건이 적용됩니다. 포인터를 저장할 때도 데이터 행에 충분한 공간이 필요합니다.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 문자열 및 포인터는 가변 길이 문자열과 비슷하게 취급됩니다.BLOB strings and pointers stored in the row of a table are treated similarly to variable-length strings. SQL ServerSQL Server에는 문자열 또는 포인터를 저장하는 데 필요한 바이트 수만 사용됩니다.uses only the number of bytes required to store the string or the pointer.

기존 BLOB 문자열은 text in row가 처음 설정될 때 즉시 변환되지 않고Existing BLOB strings are not converted immediately when text in row is first enabled. 업데이트될 때만 변환됩니다.The strings are converted only when they are updated. 마찬가지로 text in row 옵션 제한을 늘리면 데이터 행에 이미 있는 text, ntext또는 image 문자열이 업데이트 될 때까지 새 제한을 따르도록 변환 되지 않습니다.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.

참고

text in row 옵션을 해제하거나 옵션의 제한 값을 줄이려면 모든 BLOB을 변환해야 하므로 변환해야 하는 BLOB 문자열 수에 따라 프로세스가 오래 걸릴 수도 있습니다.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. 변환을 처리하는 동안 테이블은 잠깁니다.The table is locked during the conversion process.

테이블 변수를 반환하는 함수를 포함한 테이블 변수의 경우 text in row 옵션이 기본 인라인 제한 값 256으로 자동 설정됩니다.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. 이 옵션은 변경되지 않습니다.This option cannot be changed.

text in row 옵션은 TEXTPTR, WRITETEXT, UPDATETEXT 및 READTEXT 함수를 지원합니다.The text in row option supports the TEXTPTR, WRITETEXT, UPDATETEXT, and READTEXT functions. SUBSTRING() 함수를 사용하여 BLOB을 부분적으로 읽을 수 있지만 행 내부 텍스트 포인터에는 다른 텍스트 포인터와는 다른 기간 및 숫자 제한이 있습니다.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.

테이블의 VarDecimal 스토리지 형식을 일반 Decimal 스토리지 형식으로 변경하려면 데이터베이스는 단순 복구 모드이어야 합니다.To change a table from vardecimal storage format back to the normal decimal storage format, the database must be in SIMPLE recovery mode. 복구 모드를 변경하면 백업 목적의 로그 체인이 끊어지므로 테이블에서 VarDecimal 스토리지 형식을 제거한 후 전체 데이터베이스 백업을 만들어야 합니다.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.

기존 LOB 데이터 형식 열 (text, ntext 또는 image)을 중소 규모의 큰 값 유형 (varchar (max), nvarchar (max) 또는 varbinary (max))으로 변환 하는 경우 대부분의 문은 사용자 환경에서 큰 값 유형 열을 참조 하지 않으므로 최적의 성능을 얻기 위해 large_value_types_out_of_row1 로 변경 하는 것이 좋습니다.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. Large_value_types_out_of_row 옵션 값이 변경 되 면 기존 varchar (max), nvarchar (max), varbinary (max) 및 xml 값이 즉시 변환 되지 않습니다.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. 문자열의 스토리지는 이후에 업데이트될 때 변경됩니다.The storage of the strings is changed as they are subsequently updated. 테이블에 삽입되는 새 값은 적용된 테이블 옵션에 따라 저장됩니다.Any new values inserted into a table are stored according to the table option in effect. 즉각적인 결과를 위해 데이터의 복사본을 만든 다음, large_value_types_out_of_row 설정을 변경 하 고 각 작은-보통 크기의 작은 값 유형 열을 자동으로 업데이트 하 여 문자열의 저장소가 적용 되는 테이블 옵션으로 변경 되도록 합니다.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. 테이블을 압축하려면 업데이트 또는 다시 채우기 후 테이블에 대한 인덱스를 다시 빌드하세요.Consider rebuilding the indexes on the table after the update or repopulation to condense the table.

사용 권한Permissions

sp_tableoption을 실행하려면 테이블에 대한 ALTER 권한이 필요합니다.To execute sp_tableoption requires ALTER permission on the table.

예제Examples

A.A. xml 데이터를 행 외부에 저장Storing xml data out of the row

다음 예에서는 테이블의 xml 데이터를 행 외부에 저장 하도록 지정 합니다 HumanResources.JobCandidate .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. 테이블에 VarDecimal 스토리지 형식 사용Enabling vardecimal storage format on a table

다음 예에서는 테이블을 수정 Production.WorkOrderRouting 하 여 decimal 데이터 형식을 저장소 형식으로 저장 합니다 vardecimal .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';  

참고 항목See Also

sys.tables(Transact-SQL) sys.tables (Transact-SQL)
OBJECTPROPERTY(Transact-SQL) OBJECTPROPERTY (Transact-SQL)
시스템 저장 프로시저(Transact-SQL) System Stored Procedures (Transact-SQL)
Transact-sql)(저장 프로시저 데이터베이스 엔진 Database Engine Stored Procedures (Transact-SQL)