Bekerja dengan direktori dan jalur di FileTables

Berlaku untuk:SQL Server

Menjelaskan struktur direktori tempat file disimpan dalam FileTables.

Cara: Bekerja dengan Direktori dan Jalur di FileTables

Anda dapat menggunakan tiga fungsi berikut untuk bekerja dengan direktori FileTable di Transact-SQL:

Untuk mendapatkan hasil ini Gunakan fungsi ini
Dapatkan jalur UNC tingkat akar untuk FileTable tertentu atau untuk database saat ini. FileTableRootPath (Transact-SQL)
Dapatkan jalur UNC absolut atau relatif untuk file atau direktori dalam FileTable. GetFileNamespacePath (Transact-SQL)
Dapatkan nilai ID pencari jalur untuk file atau direktori yang ditentukan dalam FileTable, dengan menyediakan jalur. GetPathLocator (Transact-SQL)

Menggunakan jalur relatif untuk kode portabel

Untuk menjaga kode dan aplikasi tetap independen dari komputer dan database saat ini, hindari menulis kode yang bergantung pada jalur file absolut. Sebagai gantinya, dapatkan jalur lengkap untuk file pada waktu proses dengan menggunakan fungsi FileTableRootPath (Transact-SQL) dan GetFileNamespacePath (Transact-SQL)) bersama-sama, seperti yang ditunjukkan dalam contoh berikut. Secara default, GetFileNamespacePath fungsi mengembalikan jalur relatif file di bawah jalur akar untuk database.

USE database_name;

DECLARE @root NVARCHAR(100);
DECLARE @fullpath NVARCHAR(1000);

SELECT @root = FileTableRootPath();

SELECT @fullpath = @root + file_stream.GetFileNamespacePath()
FROM filetable_name
WHERE name = N'document_name';

PRINT @fullpath;
GO

Batasan

Tingkat sarang

Penting

Anda tidak dapat menyimpan lebih dari 15 tingkat subdirektori dalam direktori FileTable. Ketika Anda menyimpan 15 tingkat subdirektori, maka tingkat terendah tidak dapat berisi file, karena file-file ini akan mewakili tingkat tambahan.

Panjang nama jalur lengkap

Penting

Sistem file NTFS mendukung nama jalur yang jauh lebih panjang dari batas 260 karakter shell Windows dan sebagian besar API Windows. Oleh karena itu dimungkinkan untuk membuat file dalam hierarki file FileTable dengan menggunakan Transact-SQL yang tidak dapat Anda lihat atau buka dengan Windows Explorer atau banyak aplikasi Windows lainnya, karena nama jalur lengkap melebihi 260 karakter. Namun Anda dapat terus mengakses file-file ini dengan menggunakan Transact-SQL.

Jalur lengkap ke item yang disimpan dalam FileTable

Jalur lengkap ke file atau direktori yang disimpan dalam FileTable dimulai dengan elemen berikut:

  1. Berbagi yang diaktifkan untuk akses I/O file FILESTREAM di tingkat instans SQL Server.

  2. yang DIRECTORY_NAME ditentukan di tingkat database.

  3. Yang FILETABLE_DIRECTORY ditentukan pada tingkat FileTable.

Hierarki yang dihasilkan terlihat seperti ini:

\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\

Hierarki direktori ini membentuk akar namespace file FileTable. Di bawah hierarki direktori ini, data FILESTREAM untuk FileTable disimpan sebagai file, dan sebagai subdirektori yang juga dapat berisi file dan subdirektori.

Penting untuk diingat bahwa hierarki direktori yang dibuat di bawah berbagi FILESTREAM tingkat instans adalah hierarki direktori virtual. Hierarki ini disimpan dalam database SQL Server dan tidak diwakili secara fisik dalam sistem file NTFS. Semua operasi yang mengakses file dan direktori di bawah berbagi FILESTREAM dan di FileTable yang dikandungnya dicegat dan ditangani oleh komponen SQL Server yang disematkan dalam sistem file.

Semantik direktori akar pada tingkat instans, database, dan FileTable

Hierarki direktori ini mengamati semantik berikut:

  • Berbagi FILESTREAM tingkat instans dikonfigurasi oleh administrator dan disimpan sebagai properti server. Anda dapat mengganti nama berbagi ini dengan menggunakan Pengelola Konfigurasi SQL Server. Operasi penggantian nama tidak berlaku sampai server dimulai ulang.

  • Tingkat DIRECTORY_NAME database null secara default saat Anda membuat database baru. Administrator dapat mengatur atau mengubah nama ini dengan menggunakan ALTER DATABASE pernyataan . Nama harus unik (dalam perbandingan yang tidak peka huruf besar/kecil) dalam instans tersebut.

  • Anda biasanya memberikan FILETABLE_DIRECTORY nama sebagai bagian CREATE TABLE dari pernyataan saat membuat FileTable. Anda dapat mengubah nama ini dengan menggunakan ALTER TABLE perintah .

  • Anda tidak dapat mengganti nama direktori akar ini melalui operasi I/O file.

  • Anda tidak dapat membuka direktori akar ini dengan handel file eksklusif.

Kolom is_directory dalam skema FileTable

Tabel berikut ini menjelaskan interaksi antara is_directory kolom dan file_stream kolom yang berisi data FILESTREAM dalam FileTable.

nilai is_directory nilai file_stream Perilaku
FALSE NULL Ini adalah kombinasi yang tidak valid yang ditangkap oleh batasan yang ditentukan sistem.
FALSE <value> Item mewakili file.
TRUE NULL Item mewakili direktori.
TRUE <value> Ini adalah kombinasi yang tidak valid yang ditangkap oleh batasan yang ditentukan sistem.

Menggunakan Nama Jaringan Virtual (VPN) dengan grup ketersediaan AlwaysOn

Saat database yang berisi data FILESTREAM atau FileTable milik grup ketersediaan: