ALTER DATABASE [TestDB1]
ADD FILEGROUP [FileStreamGroup] CONTAINS FILESTREAM --添加FILESTREAM文件组
GO
ALTER DATABASE [TestDB1]
ADD FILE ( NAME = N'FileStream', FILENAME = N'C:\FileStream) --添加FILESTREAM文件
TO FILEGROUP [FileStreamGroup]
GO 系统将自动创建C:\FileStream文件夹并在其中写入filestream.hdr文件,该文件是 FILESTREAM容器的头文件不能删除,一定要确保在运行该语句之前C:\FileStream并不存在。
(7)创建了FILESTREAM文件组后便可创建和修改表,指定某varbinary(max)类型的列包含FILESTREAM数据。例如创建Files表,该表包含FileID和FIleContent列,具体脚本如代码:
CREATE TABLE Files
(
FileID UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE,
ID INT UNIQUE,
FileContent VARBINARY(MAX) FILESTREAM NULL --FILESTREAM类型的二进制
)管理与使用FILESTREAM
在创建好FILESTREAM表后即可向其中添加、修改和读取数据。SQL Server支持使用T-SQL和WIN32 API两种方式访问FILESTREAM。
对于T-SQL访问FILESTREAM数据列来说,FILESTREAM是完全透明的,也就是说,T-SQL仍然使用一般的访问varbinary(max)数据列的方式访问,并不会因为是FILESTREAM列而有所不同。
例如向Files表中插入数据、修改表数据和删除数据的SQL脚本如代码:
INSERT INTO Files --插入测试数据
VALUES (newid (),1, CAST('TestFileStream1' as varbinary(max)));
GO
UPDATE Files --更新测试数据
SET FileContent=CAST('TestFileStream2' as varbinary(max))
WHERE ID=1
GO
DELETE FROM Files --删除测试数据
WHERE ID=1 无论是插入数据还是修改数据,SQL Server都将在文件系统中创建新的文件来保存最新的修改文件内容,修改或删除数据后文件系统中的文件将保留,而不会被同时删除。
使用FILESTREAM来存储二进制大型对象(BLOB)数据时,可使用Win32 API来处理文件。为了支持在Win32应用程序中处理FILESTREAMBLOB数据。所有FILESTREAM数据容器访问都是在SQL Server事务中执行的。可在同一事务中执行T-SQL语句以保持SQL数据和FILESTREAM数据之间的一致性。