Muat File ke dalam FileTables

Berlaku untuk:SQL Server

Menjelaskan cara memuat atau memigrasikan file ke FileTables.

Memuat atau Memigrasikan File ke dalam FileTable

Metode yang Anda pilih untuk memuat atau memigrasikan file ke file FileTable bergantung pada tempat file saat ini disimpan.

Lokasi file saat ini Opsi untuk migrasi
File saat ini disimpan dalam sistem file.

SQL Server tidak memiliki pengetahuan tentang file.
Karena FileTable muncul sebagai folder dalam sistem file Windows, Anda dapat dengan mudah memuat file ke FileTable baru dengan menggunakan salah satu metode yang tersedia untuk memindahkan atau menyalin file. Metode ini termasuk Windows Explorer, opsi baris perintah termasuk xcopy dan robocopy, dan skrip atau aplikasi kustom.

Anda tidak dapat mengonversi folder yang ada ke FileTable.
File saat ini disimpan dalam sistem file.

SQL Server berisi tabel metadata yang berisi penunjuk ke file.
Langkah pertama adalah memindahkan atau menyalin file dengan menggunakan salah satu metode sebelumnya yang disebutkan.

Langkah kedua adalah memperbarui tabel metadata yang ada untuk menunjuk ke lokasi baru file.

Untuk informasi selengkapnya, lihat Contoh: Memigrasikan File dari Sistem File ke dalam FileTable di artikel ini.

Cara: Memuat File ke dalam FileTable

Anda bisa menggunakan metode berikut untuk memuat file ke dalam FileTable:

  • Seret dan letakkan file dari folder sumber ke folder FileTable baru di Windows Explorer.

  • Gunakan opsi baris perintah seperti MOVE, COPY, XCOPY, atau ROBOCOPY dari prompt perintah atau dalam file batch atau skrip.

  • Tulis aplikasi kustom untuk memindahkan atau menyalin file di C# atau Visual Basic.NET. Panggil metode dari namespace System.IO .

Contoh: Memigrasikan File dari Sistem File ke dalam FileTable

Dalam skenario ini, file Anda disimpan dalam sistem file, dan Anda memiliki tabel metadata di SQL Server yang berisi pointer ke file. Anda ingin memindahkan file ke fileTable, lalu mengganti jalur UNC asli untuk setiap file dalam metadata dengan jalur UNC FileTable. Fungsi GetPathLocator (Transact-SQL) membantu Anda mencapai tujuan ini.

Untuk contoh ini, asumsikan bahwa ada tabel database yang ada, PhotoMetadata, yang berisi data tentang foto. Tabel ini memiliki kolom UNCPath tipe varchar(512) yang berisi jalur UNC aktual ke file .jpg.

Untuk memigrasikan file gambar dari sistem file ke fileTable, Anda harus melakukan hal-hal berikut:

  1. Buat FileTable baru untuk menyimpan file. Contoh ini menggunakan nama tabel, dbo. PhotoTable, tetapi tidak memperlihatkan kode untuk membuat tabel.

  2. Gunakan xcopy atau alat serupa untuk menyalin file .jpg, dengan struktur direktorinya, ke direktori akar FileTable.

  3. Perbaiki metadata dalam tabel PhotoMetadata , dengan menggunakan kode yang mirip dengan contoh berikut:

--  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);  

Memuat File Secara Massal ke FileTable

FileTable berperilaku seperti tabel normal untuk operasi massal, dengan kualifikasi berikut:

FileTable memiliki batasan yang ditentukan sistem yang memastikan bahwa integritas namespace file dan direktori dipertahankan. Batasan ini harus diverifikasi pada data secara massal yang dimuat ke dalam FileTable. Karena beberapa operasi penyisipan massal memungkinkan batasan tabel diabaikan, persyaratan berikut diberlakukan.

  • Operasi pemuatan massal yang memberlakukan batasan dapat dijalankan terhadap FileTable seperti pada tabel lain. Kategori ini mencakup operasi berikut:

    • bcp dengan klausa CHECK_CONSTRAINTS.

    • SISIPKAN MASSAL dengan klausa CHECK_CONSTRAINTS.

    • SISIPKAN KE DALAM ... SELECT * FROM OPENROWSET(BULK ...) tanpa klausa IGNORE_CONSTRAINTS.

  • Operasi pemuatan massal yang tidak memberlakukan batasan gagal kecuali batasan yang ditentukan sistem FileTable telah dinonaktifkan. Kategori ini mencakup operasi berikut:

    • bcp tanpa klausa CHECK_CONSTRAINTS.

    • SISIPAN MASSAL tanpa klausa CHECK_CONSTRAINTS.

    • SISIPKAN KE DALAM ... SELECT * FROM OPENROWSET(BULK ...) dengan klausa IGNORE_CONSTRAINTS.

Cara: Memuat File Secara Massal ke FileTable

Anda dapat menggunakan berbagai metode untuk memuat file secara massal ke dalam FileTable:

  • Bcp

    • Hubungi dengan klausa CHECK_CONSTRAINTS .

    • Nonaktifkan namespace fileTable dan panggilan tanpa klausa CHECK_CONSTRAINTS . Kemudian aktifkan kembali namespace FileTable.

  • SISIPAN MASSAL

    • Hubungi dengan klausa CHECK_CONSTRAINTS .

    • Nonaktifkan namespace fileTable dan panggilan tanpa klausa CHECK_CONSTRAINTS . Kemudian aktifkan kembali namespace FileTable.

  • SISIPKAN KE DALAM ... PILIH * DARI OPENROWSET(MASSAL ...)

    • Hubungi dengan klausa IGNORE_CONSTRAINTS .

    • Nonaktifkan namespace fileTable dan panggilan tanpa klausa IGNORE_CONSTRAINTS . Kemudian aktifkan kembali namespace FileTable.

Untuk informasi tentang menonaktifkan batasan FileTable, lihat Mengelola FileTable.

Cara: Menonaktifkan Batasan FileTable untuk Pemuatan Massal

Untuk memuat file secara massal ke fileTable tanpa overhead memberlakukan batasan yang ditentukan sistem, Anda dapat menonaktifkan batasan untuk sementara waktu. Untuk informasi selengkapnya, lihat Mengelola FileTables.

Lihat Juga

Mengakses FileTables dengan Transact-SQL
Mengakses FileTables dengan API Input-Output File