Bagikan melalui


Muat File ke FileTables

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 dalam 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 pointer ke file.
Langkah pertama adalah memindahkan atau menyalin file dengan menggunakan salah satu metode yang disebutkan di atas.

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 dalam topik ini.

Cara: Memuat File ke dalam FileTable

Metode yang bisa Anda gunakan untuk memuat file ke dalam FileTable meliputi yang berikut ini:

  • 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 di C# atau Visual Basic.NET yang menggunakan metode dari namespace System.IO untuk memindahkan atau menyalin file.

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 file 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 jenis varchar(512) yang berisi jalur UNC aktual ke file .jpg.

Untuk memigrasikan file gambar dari sistem file ke fileTable, Anda harus melakukan 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 PhotoMetadata tabel, dengan menggunakan kode yang mirip dengan yang berikut ini:

--  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 Dalam 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 lainnya. Kategori ini mencakup operasi berikut:

    • bcp dengan klausa CHECK_CONSTRAINTS.

    • SISIPAN 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 klausul 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

    • Panggil dengan klausa CHECK_CONSTRAINTS .

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

  • SISIPAN MASSAL

    • Panggil dengan klausa CHECK_CONSTRAINTS .

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

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

    • Panggil dengan klausa IGNORE_CONSTRAINTS .

    • Nonaktifkan namespace dan panggilan FileTable 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 file FileTable tanpa overhead memberlakukan batasan yang ditentukan sistem, Anda dapat menonaktifkan batasan untuk sementara waktu. Untuk informasi selengkapnya, lihat Mengelola FileTables.

Lihat juga

Mengakses FileTable dengan Transact-SQL
Mengakses FileTables dengan FILE Input-Output API