FileTable로 파일 로드

적용 대상:SQL Server

파일을 FileTable로 로드 또는 마이그레이션하는 방법에 대해 설명합니다.

FileTable로 파일 로드 또는 마이그레이션

파일을 FileTable로 로드하거나 마이그레이션하기 위해 선택하는 방법은 파일이 현재 저장된 위치에 따라 달라집니다.

파일의 현재 위치 마이그레이션 옵션
파일이 현재 파일 시스템에 저장되어 있습니다.

SQL Server는 파일에 대한 지식이 없습니다.
FileTable은 Windows 파일 시스템의 폴더로 표시되므로 파일을 이동하거나 복사하는 데 사용할 수 있는 방법을 사용하여 파일을 새 FileTable에 쉽게 로드할 수 있습니다. 이러한 메서드에는 Windows 탐색기, xcopy 및 robocopy를 포함한 명령줄 옵션, 사용자 지정 스크립트 또는 애플리케이션이 포함됩니다.

기존 폴더를 FileTable로 변환할 수 없습니다.
파일이 현재 파일 시스템에 저장되어 있습니다.

SQL Server에는 파일에 대한 포인터가 포함된 메타데이터 테이블이 포함되어 있습니다.
첫 번째 단계는 앞에서 언급한 방법 중 하나를 사용하여 파일을 이동하거나 복사하는 것입니다.

두 번째 단계는 파일의 새 위치를 가리키도록 기존 메타데이터 테이블을 업데이트하는 것입니다.

자세한 내용은 예제: 이 문서의 파일 시스템에서 FileTable로 파일 마이그레이션을 참조하세요.

방법: FileTable에 파일 로드

다음 메서드를 사용하여 FileTable에 파일을 로드할 수 있습니다.

  • Windows 탐색기에서 원본 폴더의 파일을 새 FileTable 폴더로 끌어 옵니다.

  • 명령 프롬프트 또는 일괄 처리 파일 또는 스크립트에서 MOVE, COPY, XCOPY 또는 ROBOCOPY와 같은 명령줄 옵션을 사용합니다.

  • C# 또는 Visual Basic.NET 파일을 이동하거나 복사하는 사용자 지정 애플리케이션을 작성합니다. System.IO 네임스페이스에서 메서드를 호출합니다.

예: 파일 시스템에서 FileTable로 파일 마이그레이션

이 시나리오에서는 파일이 파일 시스템에 저장되고 SQL Server에 파일에 대한 포인터가 포함된 메타데이터 테이블이 있습니다. 파일을 FileTable로 이동한 다음 메타데이터에 있는 각 파일의 원래 UNC 경로를 FileTable UNC 경로로 바꾸려고 합니다. GetPathLocator(Transact-SQL) 함수를 사용하면 이 목표를 달성하는 데 도움이 됩니다.

이 예의 경우 사진에 대한 데이터가 들어 있는 PhotoMetadata라는 기존 데이터베이스 테이블이 있다고 가정합니다. 이 테이블에는 .jpg 파일의 실제 UNC 경로가 포함되어 있는 varchar (512) 형식의 UNCPath열이 있습니다.

파일 시스템에서 FileTable로 이미지 파일을 마이그레이션하려면 다음 작업을 수행해야 합니다.

  1. 파일을 저장할 새 FileTable을 만듭니다. 이 예에서는 테이블 이름으로 dbo.PhotoTable을 사용하지만 테이블을 만드는 코드는 표시되지 않습니다.

  2. xcopy 또는 유사한 도구를 사용하여 디렉터리 구조와 함께 .jpg 파일을 FileTable의 루트 디렉터리에 복사합니다.

  3. 다음 예제와 유사한 코드를 사용하여 PhotoMetadata 테이블의 메타데이터를 수정합니다.

--  Add a path locator column to the PhotoMetadata table.  
ALTER TABLE PhotoMetadata ADD pathlocator hierarchyid;  
  
-- Get the root path of the Photo directory on the File Server.  
DECLARE @UNCPathRoot varchar(100) = '\\RemoteShare\Photographs';  
  
-- Get the root path of the FileTable.  
DECLARE @FileTableRoot varchar(1000);  
SELECT @FileTableRoot = FileTableRootPath('dbo.PhotoTable');  
  
-- Update the PhotoMetadata table.  
  
-- Replace the File Server UNC path with the FileTable path.  
UPDATE PhotoMetadata  
    SET UNCPath = REPLACE(UNCPath, @UNCPathRoot, @FileTableRoot);  
  
-- Update the pathlocator column to contain the pathlocator IDs from the FileTable.  
UPDATE PhotoMetadata  
    SET pathlocator = GetPathLocator(UNCPath);  

FileTable에 파일 대량 로드

FileTable은 다음 한정을 사용하여 대량 작업에 대한 일반 테이블처럼 동작합니다.

FileTable에는 파일 및 디렉터리 네임스페이스의 무결성이 유지되도록 하는 시스템 정의 제약 조건이 있습니다. 이러한 제약 조건은 FileTable에 대량으로 로드된 데이터에 대해 확인해야 합니다. 일부 대량 삽입 작업을 사용하면 테이블 제약 조건을 무시할 수 있으므로 다음 요구 사항이 적용됩니다.

  • 제약 조건을 적용하는 대량 로드 작업은 다른 테이블과 마찬가지로 FileTable에 대해 실행할 수 있습니다. 이 범주에는 다음 작업이 포함됩니다.

    • bcp에 CHECK_CONSTRAINTS 절이 있습니다.

    • CHECK_CONSTRAINTS 절이 있는 BULK INSERT입니다.

    • 삽입 ... SELECT * FROM OPENROWSET(BULK ...) IGNORE_CONSTRAINTS 절이 없습니다.

  • FileTable 시스템 정의 제약 조건을 사용하지 않도록 설정하지 않으면 제약 조건을 적용하지 않는 대량 로드 작업이 실패합니다. 이 범주에는 다음 작업이 포함됩니다.

    • CHECK_CONSTRAINTS 절을 사용하지 않는 bcp

    • CHECK_CONSTRAINTS 절이 없는 BULK INSERT입니다.

    • 삽입 ... SELECT * FROM OPENROWSET(BULK ...) 및 IGNORE_CONSTRAINTS 절.

방법: FileTable에 파일 대량 로드

다양한 방법을 사용하여 FileTable에 파일을 대량 로드할 수 있습니다.

  • Bcp

    • CHECK_CONSTRAINTS 절을 사용하여 호출합니다.

    • FileTable 네임스페이스를 사용하지 않도록 설정하고, CHECK_CONSTRAINTS 절을 사용하지 않고 호출합니다. 그런 다음 FileTable 네임스페이스를 다시 사용하도록 설정합니다.

  • BULK INSERT

    • CHECK_CONSTRAINTS 절을 사용하여 호출합니다.

    • FileTable 네임스페이스를 사용하지 않도록 설정하고, CHECK_CONSTRAINTS 절을 사용하지 않고 호출합니다. 그런 다음 FileTable 네임스페이스를 다시 사용하도록 설정합니다.

  • 삽입 ... SELECT * FROM OPENROWSET(BULK ...)

    • IGNORE_CONSTRAINTS 절을 사용하여 호출합니다.

    • FileTable 네임스페이스를 사용하지 않도록 설정하고 IGNORE_CONSTRAINTS 절 없이 호출합니다. 그런 다음 FileTable 네임스페이스를 다시 사용하도록 설정합니다.

FileTable 제약 조건을 해제하는 방법은 FileTables 관리를 참조하세요.

방법: 대량 로드에 대한 FileTable 제약 조건 사용 안 함

시스템 정의 제약 조건을 적용하는 오버헤드 없이 파일을 FileTable로 대량 로드하려면 제약 조건을 일시적으로 사용하지 않도록 설정할 수 있습니다. 자세한 내용은 FileTable 관리를 참조 하세요.

참고 항목

Transact-SQL을 사용하여 FileTable에 액세스
파일 입력 출력 API를 사용하여 FileTable에 액세스