使用 Transact-SQL 存取 FILESTREAM 資料

本主題描述如何使用 Transact-SQL INSERT、UPDATE 和 DELETE 子句來管理 FILESTREAM 資料。

注意

本主題中的範例需要使用在 建立啟用 FILESTREAM 的資料庫建立儲存 FILESTREAM 資料的資料表中建立之啟用 FILESTREAM 的資料庫和資料表。

插入包含 FILESTREAM 資料的資料列

若要將資料列加入至支援 FILESTREAM 資料的資料表,請使用 Transact-SQL INSERT 陳述式。 當您將資料插入 FILESTREAM 資料行時,可以插入 NULL 或 varbinary(max) 值。

插入 NULL

下列範例將示範如何插入 NULL。 當 FILESTREAM 值為 NULL 時,Database Engine 不會在檔案系統中建立檔案。

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 1, NULL);
GO

插入長度為零的記錄

下列範例將示範如何使用 INSERT 來建立長度為零的記錄。 當您想要取得檔案控制代碼,但是將要使用 Win32 API 操作檔案時,這會很有用。

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 2, 
      CAST ('' as varbinary(max)));
GO

建立資料檔

下列範例將示範如何使用 INSERT 來建立包含資料的檔案。 資料庫引擎會將字串 Seismic Data 轉換為 varbinary(max) 值。 FILESTREAM 會建立此 Windows 檔案 (如果不存在的話),然後資料會加入到此資料檔中。

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 3, 
      CAST ('Seismic Data' as varbinary(max)));
GO

當您從 Archive.dbo.Records table,結果類似下表所示的結果。 不過, Id 資料行將包含不同的 GUID。

Id SerialNumber 繼續
C871B90F-D25E-47B3-A560-7CC0CA405DAC 1 NULL
F8F5C314-0559-4927-8FA9-1535EE0BDF50 2 0x
7F680840-B7A4-45D4-8CD5-527C44D35B3F 3 0x536569736D69632044617461

更新 FILESTREAM 資料

您可以使用 Transact-SQL 來更新檔案系統檔案中的資料;不過,當您必須將大量資料串流至檔案時,您可能不想要這麼做。

下列範例會以文字 Xray 1來取代檔案記錄中的所有文字。

UPDATE Archive.dbo.Records
SET [Chart] = CAST('Xray 1' as varbinary(max))
WHERE [SerialNumber] = 2;

刪除 FILESTREAM 資料

當您刪除包含 FILESTREAM 欄位的資料列時,您也會刪除其基礎檔案系統的檔案。 因此,刪除資料列與檔案的唯一方法,是使用 Transact-SQL DELETE 陳述式。

下列範例將示範如何刪除資料列及相關聯的檔案系統檔案。

DELETE Archive.dbo.Records
WHERE SerialNumber = 1;
GO

當您從 dbo.Archive 資料表中選取所有資料時,此資料列就會消失。 您無法再使用相關聯的檔案。

注意

基礎檔案會由 FILESTREAM 記憶體回收行程所移除。

另請參閱

啟用及設定 FILESTREAM
避免與 FILESTREAM 應用程式中的資料庫作業相衝突