分享方式:


載入檔案至 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,其中包含相片的相關資料。 這個資料表中有一個 varchar (512) 類型的 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 with CHECK_CONSTRAINTS 子句。
    • BULK INSERT with 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 ...) with IGNORE_CONSTRAINTS 子句。

如何:將檔案大量載入 FileTable

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

使用 CHECK_CONSTRAINTS 子句呼叫 。

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

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

如何:為大量載入停用 FileTable 條件約束

若不希望大量載入檔案至 FileTable 時發生強制啟動系統定義之條件約束負擔,您可暫時停用該條件約束。 如需詳細資訊,請參閱 管理作業步驟