SQL Server 2008 FileStream
FileStream:文件流,为了解决大对象BLOB(Binary Large Objects)的存储问题.对于大对象存储,并且不受2GB的限制.
以往有两种方式:
(1)存储在数据库里面,这种方式一般使用image字段,或者varbinary(max)来做,好处是可以统一备份,但实际效率较低;
(2)存储在文件系统,而数据库中存储文件路径,这种方式数据库压力减轻了,但却不方便统一备份和管理.
SQL SERVER 2008新引入的文件流就是两者的统一.文件还是放在文件系统,但由数据库进行管理,可以统一备份和还原.
如何使用FileStream?
一.启用FileStream
(1)在SQL Server配置管理器中打开SQL Server数据库引擎的属性窗口.
(2)切换到FILESTREAM选项卡,选中"针对Transact-SQL访问启用FILESTREAM",其他选项是针对windows进行读写的,都可以选中.
(3)打开SSMS连接到数据库实例(是实例,不是具体的数据库),右击数据库实例,选择"属性"选项,切换到"高级"选项页,在文件流访问级别下拉列表框中选择"已启用完全访问"
二.初始化环境
(1)添加文件组
ALTER DATABASE [DBName] ADD FILEGROUP [FileGrp1] CONTAINS FILESTREAM
(2)添加存放文件的路径
ALTER DATABASE [DBName] ADD FILE(Name=N'filestream',FILENAME=N'C:\FileStream') TO FILEGROUP [FileGrp1]
系统将自动创建C:\FileStream文件夹并在其中写入filestream.hdr文件,该文件是 FILESTREAM容器的头文件不能删除,一定要确保在运行该语句之前C:\FileStream并不存在。
注意:文件组必须定义在NTFS格式分区下的磁盘,并且需要指向本地文件系统位置上,不允许指向网络地址network addressable storage (NAS),除非通过 iSCSI将NAS设备设置为本地NFS卷
原文(the DBA must define a database filegroup that ties an NTFS file system location to a SQL Server database. Note that the filegroup needs to point to a local file system location; filestreams can't live on a remote server or a network addressable storage (NAS) devices unless the NAS device is presented as a local NFS volume via iSCSI)
如数据库之前从未备份过,在执行以上语句时会提示须先备份LOG
三.模拟测试
(1)建表
CREATE TABLE FileStreamTest
(
ID uniqueidentifier ROWGUID NOT NULL UNIQUE DEFAULT NewID(),
FilesName varbinary(max) FILESTREAM NULL
)
FILESTREAM_ON [FileGrp1] --指示存储到哪一个文件流
*如果一个表要使用文件流,则必须有一
相关文档:
今天一个朋友问到这个问题,其实很好解决:
declare @dbname varchar(50)
declare c_database cursor for
select name from master.dbo.sysdatabas ......
创建外键约束
CREATE TABLE order_sample
(
orderid int PRIMARY KEY,
cust_id int FOREIGN KEY REFERENCES cuts_sample(cust_id) ON DELETE NO CASCADE
)
ON DELETE--用于控制尝试删除外键相关联的主表指向行时采取的操作
-NO ACTION
删除外键相关联的主表指向行时,报错
-CASCADE
删除外键相关联的主表指向行时 ......
SQL Lite
SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.
It is a open source product and can be downloaded from http://www.sqlite.org/ . SQL Lite is best suited in Smart Client architecture, where we can locally store all ......
看到别人在论坛的提问:
一个表的效率问题
今天碰到2张表
1张 有字段
表A有
jtbh(家庭编号) hzxm(户主姓名) hnbh(户内最大编号)
1000 张三 03
1001 赵六..........................
表 ......
这两天研究了SQL SERVER的字段修改.有一些心得,写出来为日后参考:
1,删除字段: ALTER TABLE [tablename] DROP COLUMN [fieldname]
删除的时候该字段必须没有被任何外键引用,没有任何约束.
2,删除约束: ALTER TABLE [tablename] DROP CONSTRAINT constraint_name
删除约束是约束名不可加单引号.
3,增加默认值约束: ALT ......