本文共 1592 字,大约阅读时间需要 5 分钟。
前言:
我们常用 SQL Server varbinary(max)类型字段存储文件、照片、影像等二进制位大型类型(BLOB),这种方法的
优点是: 1、保证大对象的事务一致性。 2、备份与还原包括大数据对象,可以对它进行时点恢复。 3、数据统一使用一种存储与查询环境。 但也存在缺点: 1.单个最大只能是2G的资料; 2.资料如果太多将影响性能,大型对象在缓存中占非常大的缓存区 3.更新大型对象时会产生较大的数据碎片。 4.数据库文件可能变的非常大。另外我们也常采用把文件存在磁盘上,而只在数据库表中存放文件地址的方法,但这种方法会增加系统的复杂度,因为需要去维护数据记录与文件地址的联系。
FileStream(文件资料流)
SQL Server 提供了 FileStream(文件资料流),将BLOB对象存储为磁盘文件,并自动管理数据库表与对应文件的联系。
一,何时考虑使用FileStream:
二,FileStream 优点:
1.大型对象存储在文件系统中、数据库中只保存48字节的指针。
2.大型对象数据在事务中与结构数据保持一致。 3.大型对象可以通过 API 、T-SQL、NTFS流访问,从而提高性能。 4.大型对象只受NTFS卷大小限制、不受数据库LOB对象2GB限制。三,怎么使用:
启用FileStream;
指定存储等级(默认为0,即不使用,1 为只能使用T-SQL存取,2 为可以使用T-SQL和文件系统存取
EXEC sp_configure filestream_access_level,2 RECONFIGURE GO在数据库
1)新增文件组 ALTER database Study add filegroup MyFileStreamGroup contains filestream2)新增文件
ALTER database Study add file ( Name = ‘Study_FileStream’, FileName = ‘D:\Study_FileStream.ndf’ ) TO filegroup MyFileStreamGroup–写入测试记录
INSERT INTO FileTable VALUES(‘F1001’,‘TestTxt’,CAST(‘This is a filestream test’ as varbinary(max)),newid())INSERT INTO FileTable
VALUES(‘F1002’,‘TestTxt1’,CAST(‘Hello word!!!’ as varbinary(max)),newid())–将一个本地文件转为 varbinary存存储
INSERT INTO FileTable VALUES(‘F1003’,‘IMG’,(SELECT * FROM OPENROWSET(BULK ‘e:\p_w_picpath\photo\MadisonAVE.JPG’, SINGLE_BLOB) AS x))GO
结果:
在磁盘中可以看到 保存的文件,而数据表中对应的字段只保留48字节的指针。转载地址:http://esmdi.baihongyu.com/