FileTable 만들기, 변경 및 삭제
적용 대상: SQL Server
새 FileTable을 만들거나 기존 FileTable을 변경 또는 삭제하는 방법을 설명합니다.
FileTable 만들기
FileTable은 미리 정의되고 고정된 스키마가 있는 특수한 사용자 테이블입니다. 이 스키마는 FILESTREAM 데이터, 파일 및 디렉터리 정보 및 파일 특성을 저장합니다. FileTable 스키마에 대한 자세한 내용은 FileTable 스키마를 참조하세요.
Transact-SQL 또는 SQL Server Management Studio를 사용하여 새 FileTable을 만들 수 있습니다. FileTable에는 고정된 스키마가 있으므로 열 목록을 지정할 필요가 없습니다. FileTable을 만들기 위한 간단한 구문을 사용하여 다음을 지정할 수 있습니다.
디렉터리 이름. FileTable 폴더 계층 구조에서 이 테이블 수준 디렉터리는 데이터베이스 수준에서 지정된 데이터베이스 디렉터리의 자식이 되고 테이블에 저장된 파일 또는 디렉터리의 부모가 됩니다.
FileTable의 Name 열에 있는 파일 이름에 사용할 데이터 정렬의 이름
자동으로 만들어지는 UNIQUE 제약 조건 및 세 가지 기본 키에 사용할 이름
방법: FileTable 만들기
Transact-SQL을 사용하여 FileTable 만들기
AS FileTable 옵션이 포함된 CREATE TABLE(Transact-SQL) 문을 호출하여 FileTable을 만듭니다. FileTable에는 고정된 스키마가 있으므로 열 목록을 지정할 필요가 없습니다. 새 FileTable에 대해 다음 설정을 지정할 수 있습니다.
FILETABLE_DIRECTORY. FileTable에 저장된 모든 파일 및 디렉터리의 루트 디렉터리 역할을 하는 디렉터리를 지정합니다. 이 이름은 데이터베이스의 모든 FileTable 디렉터리 이름 중에서 고유해야 합니다. 고유성 비교는 현재 정렬 설정에 관계없이 대소문자를 구분하지 않습니다.
이 값의 데이터 형식은 nvarchar(255) 이며 Latin1_General_CI_AS_KS_WS의 고정된 데이터 정렬을 사용합니다.
제공하는 디렉터리 이름은 유효한 디렉터리 이름에 대한 파일 시스템의 요구 사항을 준수해야 합니다.
이 이름은 데이터베이스의 모든 FileTable 디렉터리 이름 중에서 고유해야 합니다. 고유성 비교는 현재 정렬 설정에 관계없이 대소문자를 구분하지 않습니다.
FileTable을 만들 때 디렉터리 이름을 제공하지 않으면 FileTable 자체의 이름이 디렉터리 이름으로 사용됩니다.
FILETABLE_COLLATE_FILENAME. FileTable의 Name 열에 적용할 데이터 정렬의 이름을 지정합니다.
지정된 정렬은 Windows 파일 명명 의미 체계를 준수하기 위해 대/소문자를 구분하지 않아야 합니다.
FILETABLE_COLLATE_FILENAME값을 제공하지 않거나 database_default를 지정한 경우 열은 현재 데이터베이스의 데이터 정렬을 상속합니다. 현재 데이터베이스 정렬이 대/소문자를 구분하는 경우 오류가 발생하고 CREATE TABLE 작업이 실패합니다.
자동으로 만들어지는 UNIQUE 제약 조건 및 세 가지 기본 키에 사용할 이름도 지정할 수 있습니다. 이름을 제공하지 않으면 이 항목의 뒷부분에 설명된 대로 시스템에서 이름을 생성합니다.
FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME
FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME
FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME
예제
다음 예제에서는 새 FileTable을 만들고 FILETABLE_DIRECTORY 및 FILETABLE_COLLATE_FILENAME 모두에 대해 사용자 정의 값을 지정합니다.
CREATE TABLE DocumentStore AS FileTable
WITH (
FileTable_Directory = 'DocumentTable',
FileTable_Collate_Filename = database_default
);
GO
또한 다음 예에서는 새로운 Filetable을 만듭니다. 사용자 정의 값은 지정되지 않으므로 FILETABLE_DIRECTORY 값은 FileTable의 이름이 되고, FILETABLE_COLLATE_FILENAME 값은 database_default, 기본 키 및 고유 제약 조건은 시스템에서 생성된 이름을 받습니다.
CREATE TABLE DocumentStore AS FileTable;
GO
SQL Server Management Studio를 사용하여 FileTable 만들기
개체 탐색기 선택한 데이터베이스 아래의 개체를 확장한 다음 테이블 폴더를 마우스 오른쪽 단추로 클릭한 다음 새 FileTable을 선택합니다.
이 옵션은 FileTable을 만들기 위해 사용자 지정하고 실행할 수 있는 Transact-SQL 스크립트 템플릿이 포함된 새 스크립트 창을 엽니다. 쿼리 메뉴의 템플릿 매개 변수 값 지정 옵션을 사용하여 스크립트를 쉽게 사용자 지정할 수 있습니다.
FileTable 만들기에 대한 요구 사항 및 제한 사항
기존 테이블을 변경하여 FileTable로 변환할 수 없습니다.
데이터베이스 수준에서 이전에 지정한 부모 디렉터리에 null이 아닌 값이 있어야 합니다. 데이터베이스 수준 디렉터리를 지정하는 방법에 대한 자세한 내용은 FileTable에 대한 필수 구성 요소 사용을 참조하세요.
FileTable에는 FILESTREAM 열이 포함되어 있으므로 FileTable에는 유효한 FILESTREAM 파일 그룹이 필요합니다. 필요에 따라 FileTable을 만들기 위한 CREATE TABLE 명령의 일부로 유효한 FILESTREAM 파일 그룹을 지정할 수 있습니다. 파일 그룹을 지정하지 않으면 FileTable은 데이터베이스에 대한 기본 FILESTREAM 파일 그룹을 사용합니다. 데이터베이스에 FILESTREAM 파일 그룹이 없으면 오류가 발생합니다.
CREATE TABLE...AS FILETABLE 문의 일부로 테이블 제약 조건을 생성할 수 없습니다. 그러나 ALTER TABLE 문을 사용하여 나중에 제약 조건을 추가할 수 있습니다.
tempdb 데이터베이스 또는 다른 시스템 데이터베이스에서는 FileTable을 만들 수 없습니다.
FileTable을 임시 테이블로 만들 수 없습니다.
FileTable 변경
FileTable에는 미리 정의되고 고정된 스키마가 있으므로 해당 열을 추가하거나 변경할 수 없습니다. 그러나 사용자 지정 인덱스, 트리거, 제약 조건 및 기타 옵션을 FileTable에 추가할 수 있습니다.
ALTER TABLE 문을 사용하여 시스템 정의 제약 조건을 포함하여 FileTable 네임스페이스를 사용하거나 사용하지 않도록 설정하는 방법에 대한 자세한 내용은 FileTable 관리를 참조하세요.
방법: FileTable의 디렉터리 변경
Transact-SQL을 사용하여 FileTable의 디렉터리 변경
ALTER TABLE 문을 호출하고 FILETABLE_DIRECTORY SET 옵션에 유효한 새 값을 제공합니다.
예제
ALTER TABLE filetable_name
SET ( FILETABLE_DIRECTORY = N'directory_name' );
GO
SQL Server Management Studio를 사용하여 FileTable의 디렉터리 변경
개체 탐색기 FileTable을 마우스 오른쪽 단추로 클릭하고 속성을 선택하여 테이블 속성 대화 상자를 엽니다. FileTable 페이지에서 FileTable 디렉터리 이름의 새 값을 입력합니다.
FileTable 변경에 대한 요구 사항 및 제한 사항
FILETABLE_COLLATE_FILENAME 값을 변경할 수 없습니다.
FileTable의 시스템 정의 열은 변경, 삭제하거나 사용하지 않도록 설정할 수 없습니다.
FileTable에 새 사용자 열, 계산 열 또는 지속형 계산 열을 추가할 수 없습니다.
FileTable 삭제
DROP TABLE(Transact-SQL) 문의 일반 구문을 사용하여 FileTable을 삭제할 수 있습니다.
Filetable를 삭제하면 다음 개체도 삭제됩니다.
FileTable의 모든 열과 테이블과 연결된 모든 개체(예: 인덱스, 제약 조건 및 트리거)도 삭제됩니다.
FileTable 디렉터리와 포함된 하위 디렉터리가 데이터베이스의 FILESTREAM 파일 및 디렉터리 계층에서 사라집니다.
FileTable의 파일 네임스페이스에 열린 파일 핸들이 있는 경우 DROP TABLE 명령이 실패합니다. 열린 핸들을 닫는 방법에 대한 자세한 내용은 FileTable 관리를 참조하세요.
FileTable을 만들 때 생성되는 다른 데이터베이스 개체
새 FileTable을 생성하면 일부 시스템 정의 인덱스와 제약 조건도 생성됩니다. 이러한 개체는 변경하거나 삭제할 수 없으며, FileTable 자체가 삭제된 경우에만 사라집니다. 이러한 개체 목록을 보려면 카탈로그 뷰 sys.filetable_system_defined_objects(Transact-SQL)를 쿼리합니다.
--View all objects for all filetables, unsorted
SELECT * FROM sys.filetable_system_defined_objects;
GO
--View sorted list with friendly names
SELECT OBJECT_NAME(parent_object_id) AS 'FileTable', OBJECT_NAME(object_id) AS 'System-defined Object'
FROM sys.filetable_system_defined_objects
ORDER BY FileTable, 'System-defined Object';
GO
새 FileTable을 만들 때 생성되는 인덱스
새 FileTable을 만들면 다음과 같은 시스템 정의 인덱스도 만들어집니다.
열 | 인덱스 유형 |
---|---|
[path_locator] ASC | 기본 키, 비클러스터형 |
[parent_path_locator] ASC, [name] ASC |
고유, 비클러스터형 |
[stream_id] ASC | 고유, 비클러스터형 |
새 FileTable을 만들 때 생성되는 제약 조건
새 FileTable을 생성하면 다음과 같은 시스템 정의 제약 조건도 생성됩니다.
제약 조건 | 적용 |
---|---|
다음 열에 대한 기본 제약 조건: creation_time is_archive is_directory is_hidden is_offline is_readonly is_system is_temporary last_access_time last_write_time path_locator stream_id |
시스템 정의 기본 제약 조건이 지정된 열에 기본값을 적용합니다. |
CHECK 제약 조건 | 시스템 정의 CHECK 제약 조건은 다음 요구 사항을 적용합니다. 유효한 파일 이름입니다. 유효한 파일 특성입니다. 부모 개체는 디렉터리여야 합니다. 네임스페이스 계층 구조는 파일을 조작하는 동안 잠깁니다. |
시스템 정의 제약 조건에 대한 명명 규칙
위에 설명된 시스템 정의 제약 조건은 <constraintType>_<tablename>[_<columnname>]_<uniquifier> 형식으로 명명됩니다. 여기서:
<constraint_type>은 CK(check 제약 조건), DF(기본 제약 조건), FK(외래 키), PK(기본 키) 또는 UQ(고유 제약 조건)입니다.
<uniquifier>는 이름을 고유하게 만드는 시스템 생성 문자열입니다. 이 문자열에는 FileTable 이름과 고유 식별자가 포함될 수 있습니다.