다음을 통해 공유


특수 데이터 사용

특수 데이터 형식은 다른 어떤 데이터 형식 범주에도 속하지 않는 데이터 형식입니다. 예를 들어 고객 조사에서 데이터를 예 또는 아니요 값에 해당하는 1 또는 0으로 저장하려면 bit 데이터 형식을 사용합니다. Microsoft SQL Server 2005에는 이 범주에 속하는 몇 가지 데이터 형식이 있습니다.

  • bit
    bit 데이터는 작은따옴표로 묶지 않아도 됩니다. bit 열에 0과 1만 저장될 수 있다는 점을 제외하면 SQL Server 정수 및 숫자 데이터와 비슷한 숫자 데이터입니다.

    문자열 값 True와 False는 아래에 표시된 것처럼 bit 값으로 변환될 수 있습니다.

    SELECT CONVERT (bit, 'true'), CONVERT(bit, 'false')
    

    True는 1로 변환되고 False는 0으로 변환됩니다.

  • sql_variant
    SQL Server의 sql_variant 데이터 형식을 사용하여 하나의 열, 매개 변수 또는 변수에 서로 다른 데이터 형식의 데이터 값을 저장할 수 있습니다. sql_variant 열의 각 인스턴스는 데이터 값과 데이터 값을 설명하는 메타데이터(기본 데이터 형식, 최대 크기, 소수 자릿수, 전체 자릿수 및 데이터 정렬)를 기록합니다.

    다음 예의 두 번째 테이블에는 sql_variant 열이 있습니다.

    CREATE TABLE ObjectTable (ObjectID int CONSTRAINT PKObjectTable PRIMARY KEY, ObjectName nvarchar(80), ObjectWeight decimal(10,3), ObjectColor nvarchar(20))
    CREATE TABLE VariablePropertyTable (ObjectID int REFERENCES ObjectTable(ObjectID), PropertyName      nvarchar(100), PropertyValue sql_variant, CONSTRAINT PKVariablePropertyTable PRIMARY KEY(ObjectID, PropertyName))
    

    특정 sql_variant 인스턴스에 대한 메타데이터 정보를 가져오려면 SQL_VARIANT_PROPERTY 함수를 사용합니다.

  • sysname
    SQL Server의 인스턴스에는 사용자 정의 데이터 형식인 sysname이 들어 있습니다. sysname은 테이블 열, 변수, 개체 이름을 저장하는 저장 프로시저 매개 변수 등에 사용됩니다. sysname의 정확한 정의는 식별자 규칙과 관련이 있으므로 SQL Server의 인스턴스 간에 다를 수 있습니다. sysname은 **nvarchar(128)**과 기능적으로 동일합니다. SQL Server 버전 6.5 또는 이전 버전에서는 더 적은 수의 식별자만 지원하므로 이전 버전에서 sysname은 **varchar(30)**으로 정의됩니다.

    ms191240.note(ko-kr,SQL.90).gif중요:
    대/소문자를 구분하거나 이진 데이터 정렬을 사용하는 데이터베이스에서 sysname은 소문자로 나타나는 경우에만 SQL Server 시스템 데이터 형식으로 인식됩니다.
  • table
    table 데이터 형식은 임시 테이블과 같으며 나중에 처리할 수 있도록 결과 집합을 저장하는 데 사용될 수 있습니다. 이 데이터 형식은 table 형식의 로컬 변수와 사용자 정의 함수의 반환 값을 정의하는 데만 사용될 수 있습니다.

    테이블 변수나 반환 값의 정의에는 열, 데이터 형식, 전체 자릿수, 각 열의 소수 자릿수, 선택적인 PRIMARY KEY, UNIQUE, NULL 및 CHECK 제약 조건의 정의가 포함됩니다. 사용자 정의 데이터 형식은 데이터 형식으로 사용할 수 없습니다.

    변수를 선언하거나 함수를 만드는 경우 table 변수에 저장되는 행이나 사용자 정의 함수에서 반환되는 행의 형식을 정의해야 합니다. 구문은 CREATE TABLE 구문을 기반으로 합니다. 예를 들면 다음과 같습니다.

    DECLARE @TableVar TABLE (Cola int PRIMARY KEY, Colb char(3))
    
    INSERT INTO @TableVar VALUES (1, 'abc')
    INSERT INTO @TableVar VALUES (2, 'def')
    
    SELECT * FROM @TableVar
    GO
    

    table을 반환하는 사용자 정의 함수와 table 변수는 UPDATE, DELETE 및 DECLARE CURSOR 문에서 테이블이 지원되는 경우 특정 SELECT 및 INSERT 문에서만 사용할 수 있습니다. table을 반환하는 사용자 정의 함수와 table 변수는 다른 Transact-SQL 문에서 사용할 수 없습니다.

    테이블에 적용되는 인덱스나 다른 제약 조건을 DECLARE 변수나 CREATE FUNCTION 문의 일부로 정의해야 합니다. CREATE INDEX 또는 ALTER TABLE 문은 테이블 변수와 사용자 정의 함수를 참조할 수 없으므로 나중에 적용할 수 없습니다.

    table 변수 및 사용자 정의 함수를 정의하는 데 사용되는 구문에 대한 자세한 내용은 DECLARE @local\_variable(Transact-SQL)CREATE FUNCTION(Transact-SQL)을 참조하십시오.

  • timestamp
    SQL Server timestamp 데이터 형식은 시간 또는 날짜와 관계가 없습니다. SQL Server timestamp 값은 데이터베이스에서 데이터가 수정된 상대적 순서를 나타내는 이진수입니다. timestamp 데이터 형식은 초기에 SQL Server 복구 알고리즘을 지원하도록 구현되었습니다. 페이지가 수정될 때마다 페이지에는 현재 @@DBTS 값을 사용하여 타임스탬프가 설정되고 @@DBTS는 1씩 증가합니다. 복구 작업에서는 이 정보만 있으면 페이지가 수정된 상대 순서를 판단할 수 있으며 timestamp 값은 시간과 아무 관련이 없습니다.

    SQL Server 버전 7.0 및 SQL Server 2000에서는 @@DBTS가 timestamp 열에 사용하기 위한 용도로만 증가합니다. 테이블에 timestamp 열이 있으면 INSERT, UPDATE 또는 DELETE 문에 의해 행이 수정될 때마다 해당 행의 timestamp 값이 현재 @@DBTS 값으로 설정된 다음 @@DBTS가 1씩 증가합니다.

    행을 수정할 때마다 timestamp 값이 변경되므로 키, 특히 기본 키에는 timestamp 열을 사용하지 마십시오.

    테이블의 데이터가 수정되는 시간을 기록하려면 수정될 때마다 자동으로 값을 업데이트하도록 datetime 또는 smalldatetime 데이터 형식을 사용하여 이벤트와 트리거를 기록합니다.

  • 별칭 데이터 형식
    별칭 데이터 형식을 사용하면 특정 용도에 맞춰 조정된 설명적 이름 및 형식을 사용하여 varcha 등의 SQL Server 기본 데이터 형식을 확장할 수 있습니다. 예를 들어 다음 문은 datetime 기본 데이터 형식을 사용하여 NULL을 허용하는 birthday 사용자 정의 데이터 형식을 구현합니다.

    EXEC sp_addtype birthday, datetime, 'NULL'
    

    사용자 정의 데이터 형식을 구현하기 위해 기본 유형을 선택할 때는 주의하십시오. 예를 들어 미국 사회 보장 번호는 nnn-nn-nnnn 형식입니다. 사회 보장 번호에 숫자가 포함되어 있지만 이 숫자는 식별자를 형성하며 수치 연산이 적용되지 않습니다. 그러므로 사용자 정의 사회 보장 번호 데이터 형식을 varchar로 만들고 CHECK 제약 조건을 만들어 테이블에 저장된 사회 보장 번호의 형식을 적용하는 것이 일반적입니다.

    EXEC sp_addtype SSN, 'VARCHAR(11)', 'NOT NULL'
    GO
    CREATE TABLE ShowSSNUsage (EmployeeID int PRIMARY KEY, EmployeeSSN SSN, CONSTRAINT CheckSSN CHECK ( EmployeeSSN LIKE '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' )
    )
    GO
    

    일반적으로 SSN 열이 인덱스, 특히 클러스터형 인덱스의 키 열로 사용되는 경우 대신 int 기본 데이터 형식을 사용하여 SSN 사용자 정의 데이터 형식을 구현하면 키의 크기를 11바이트에서 4바이트로 축소할 수 있습니다. 키 크기가 이렇게 감소하면 데이터 검색이 향상됩니다. SSN 값을 표시하거나 수정할 때 int에서 문자 형식으로 변환해야 하지만 데이터 검색의 효율성이 향상되고 CHECK 제약 조건을 사용할 필요가 없으므로 이 방법이 더 효율적입니다.

참고 항목

관련 자료

CREATE FUNCTION(Transact-SQL)
데이터 형식(Transact-SQL)
DECLARE @local\_variable(Transact-SQL)
SQL_VARIANT_PROPERTY(Transact-SQL)
table(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기