T-SQL编程入门经典
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FileStream 对象和语法
filestream 数据类型在SQL Server 2008中被引入,该数据类型允许在服务器文件系统中存储和同步内容,适合于管理大量的未结构化数据。
这些数据通常存储在文档或其他应用程序特定的文件类型中。
filestream 类型的列数据插入到数据库表中,但实际上存储在数据库外部的单独文件中——在NTFS 文件系统中,而不存储在SQL Server 数据库文件中。
T-SQL 查询操作与外部存储的数据之间的所有交互操作都由SQL Server 数据库引擎来管理。
这个特性默认状态为禁用,必须用系统存储过程sp_filestream_configure 来启用。
数据库要支持FileStream 类型,需要根据文件系统中的文件夹定义一个文件组,称为文件容器。
该文件组的数据库文件用于存储元数据、设置和标题信息,以实现对外部数据的管理。
要使表支持FileStream 类型,应在创建表时用FILESTREAM 关键字定义一列。
可以把数据首先写入FileStream 类型的列中,然后用标准的T-SQL 语句INSERT 存储到NTFS 文件系统中,或者使用托管或未托管的程序代码。
filestream 数据的最初内容常常包含在源文档文件中,所以插入或修改这些数据需要执行外部的程序代码,这一般需要高级文件管理和代码流处理,而不能仅用T-SQL 查询来处理。
SQL Server Native Client 10.0库(sqlncli10.dll)中的OpenSQLFileStream API 提供了编程支持。
这是对Win32 API 的扩展,函数可以从托管的.NET 代码(例如C#或Visual )或未托管代码(例如C++或Visual Basic 6)中调用。
E.1 FileStream 对象
下面列出了管理filestream 对象的系统编程对象。
附 录 E
T-SQL编程入门经典(涵盖SQL Server 2008 & 2005)
538
对象名返回类型说明
sp_filestream_configure N/A @enable_level返回参数的值:
0:禁用(默认)
1:仅允许T-SQL访问
2:允许T-SQL和本地文件系统访问
3:允许T-SQL、本地和远程文件系统访问PATHNAME() nvarchar(max)
返回FileStream类型列的文件系统路径GET_FILESTREAM_T
RANSACTION_CONT
EXT()
varbinary(max) 返回一个令牌,以协调数据库对象的事务环境或查询
与外部的程序代码
E.2 示例T-SQL脚本
下面是几个简单的T-SQL脚本示例,用于创建带filestream存储的数据库并定义支持filestream列的表,以及使用INSERT语句在外部文件中存储列文本。
E.2.1 创建带FileStream存储的数据库
CREATE DATABASE SalesDB ON PRIMARY
( NAME = SalesDB_data,
FILENAME = N'C:\Databases\MyFSDB_data.mdf',
SIZE = 10MB,
MAXSIZE = 200MB,
FILEGROWTH = 10%),
---------------------------------------------------
-- Define a file group for standard data storage --
---------------------------------------------------
FILEGROUP SalesDBData
( NAME = SalesData_Group,
FILENAME = 'C:\Databases\SalesDB_FileStream.ndf',
SIZE = 10MB,
MAXSIZE = 200MB,
FILEGROWTH = 5MB),
------------------------------------------------
-- Define a file group for filestream storage --
------------------------------------------------
FILEGROUP SalesDB_FileStream_Group CONTAINS FILESTREAM
( NAME = SalesDB_FileStream,
FILENAME = 'C:\Databases\SalesDB_FileStreamData')
----------------------------------
-- Define standard database log --
----------------------------------
附录E FileStream对象和语法
LOG ON
( NAME = 'SalesDB_log',
FILENAME = 'C:\Databases\SalesDB_log.ldf',
SIZE = 5MB,
MAXSIZE = 30MB,
FILEGROWTH = 5MB);
E.2.2 定义支持FileStream列的表
USE SalesDB
CREATE TABLE DocumentData
(
DocID UNIQUEIDENTIFIER ROWGUIDCOL
NOT NULL UNIQUE, --Standard key column
DocData varbinary(MAX) FILESTREAM --filestream type column
);
E.2.3 在外部文件中存储列文本
USESalesDB
INSERT INTO DocumentData
VALIES(NEWID(), CONVERT(varbinary(MAX), 'Sample document content'))
539。