共用方式為


載入檔案至 FileTable

適用於:SQL Server

描述如何載入或移轉檔案至 FileTable 中。

將檔案載入或移轉至 FileTable

您選擇用於將檔案載入或移轉至 FileTable 中的方法,取決於目前儲存檔案的位置。

檔案的目前位置 移轉選項
檔案目前儲存在檔案系統中。

SQL Server 不知道這些檔案。
因為 FileTable 會顯示成 Windows 檔案系統中的資料夾,所以您可以使用任何移動或複製檔案的可用方法,輕鬆地將檔案載入新的 FileTable。 這些方法包括 Windows 檔案總管、命令列選項 (包括 xcopyrobocopy),以及自訂指令碼或應用程式。

您無法將現有的資料夾轉換為 FileTable。
檔案目前儲存在檔案系統中。

SQL Server 包含內有指向這些檔案之指標的中繼資料資料表。
第一個步驟是使用上述其中一種方法移動或複製檔案。

第二個步驟是將現有的中繼資料表更新,以便指向這些檔案的新位置。

如需詳細資訊,請參閱範例:將檔案從檔案系移轉至 FileTable

如何:將檔案載入 FileTable

您可使用下列方法將檔案載入 FileTable:

  • 在 [Windows 檔案總管] 中,將檔案從來源資料夾拖放至新的 FileTable 資料夾。

  • 透過命令提示字元或在批次檔或指令碼中,使用命令列選項,例如 movecopyxcopyrobocopy

  • 在 C# 或 Visual Basic .NET 中撰寫自訂應用程式,來移動或複製檔案。 從 System.IO 命名空間呼叫方法。

範例:從檔案系統移轉檔案至 FileTable

在此情況下,您的檔案會儲存在檔案系統中,而且您擁有在 SQL Server 中內有指向這些檔案之指標的中繼資料資料表。 您想要將檔案移入 FileTable,然後使用 FileTable UNC 路徑來取代中繼資料內每個檔案的原始 UNC 路徑。 GetPathLocator 函式可協助您達成此目標。

在此範例中,假設存在現有的資料庫資料表 PhotoMetadata,其中包含相片的相關資料。 這個資料表中有一個 UNCPath 類型的 資料行,其中包含對應至 .jpg 檔案的實際 UNC 路徑。

若要將影像檔從檔案系統移轉至 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 子句。
    • BULK INSERT 搭配 CHECK_CONSTRAINTS 子句。
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) 沒有 IGNORE_CONSTRAINTS 子句。
  • 除非已停用 FileTable 系統定義的條件約束,否則不強制執行條件約束的 FileTable 大量載入作業將會失敗。 此類別包括以下操作:

    • bcp 沒有 CHECK_CONSTRAINTS 子句。
    • BULK INSERT 沒有 CHECK_CONSTRAINTS 子句。
    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) 包含IGNORE_CONSTRAINTS 的子句。

如何:將檔案大量載入 FileTable

您可以使用各種方法將檔案大量載入 FileTable:

使用子句 CHECK_CONSTRAINTS 進行呼叫。

停用 FileTable 命名空間,且不使用 CHECK_CONSTRAINTS 子句進行呼叫。 然後重新啟用 FileTable 命名空間。

如需停用 FileTable 條件約束的詳細資訊,請參閱 管理 FileTables

如何停用 FileTable 的限制條件以進行大量載入

為了避免在批量載入檔案至 FileTable 時執行系統定義的限制,您可暫時停用這些限制。 如需詳細資訊,請參閱 管理 FileTables