12.5 大对象数据的处理
在第7章介绍表的结构时,曾提到过大对象,大对象(Large Object,LOB)就是指那些包含任何数字化信息的数据字段,数字化信息可以是音频、视频、图像以及文档等。这类数据多以大容量文件的形式出现,如音频文件或图像文件等。
SQL Server 2005为VARCHAR、NVARCHAR和varbinary数据类型带来了新的变化,引入了max说明符,即varbinary(max)、VARCHAR(max)和NVARCHAR(max),替换未来版本中即将删除的IMAGE、TEXT和NTEXT类型,用来储存大容量数据文件。
大多数LOB类型的数据会占用很大的存储空间。因此,SQL Server数据库没有将LOB对象数据直接保存到指定的字段中,而是为它们单独开辟新的存储空间,在字段中保存一个16位长,指向该存储空间的指针。
为了向数据库中导入大对象数据,可以使用OPENROWSET函数,该函数通过内置的BULK访问接口支持大容量操作,提供导入大型对象的功能。对大型对象数据,OPENROWSET BULK子句支持三个选项,允许用户以单行或单列行集导入数据文件的内容。用户可以通过指定相应的选项来导入大型对象数据,而不使用格式化文件。
大对象选项包括:
SINGLE_BLOB。以单行读取数据文件的内容,以varbinary(max)类型的单列行集返回内容。
SINGLE_CLOB。以字符读取指定数据文件的内容,以VARCHAR(max)类型的单行、单列行集返回内容,使用的是当前数据库的排序规则,例如文本或 Microsoft Word文档。
SINGLE_NCLOB。以 Unicode 读取指定数据文件的内容,以 NVARCHAR(max)类型的单行、单列行集返回内容,并使用当前数据库的排序规则。
下面用一个简单的例子介绍怎样来创建包含大对象数据类型的表,以及如何导入大对象数据。
【示例35】在MyCompany数据库中,创建LOBTable表,并为Contents字段和Picture字段导入适当的数据。
完整的设计步骤如下。
(1) 在查询编辑器中输入以下代码:
USE MyCompany GO CREATE TABLE LOBTable (Name NVARCHAR(60) NULL, Numb INT NOT NULL, Class NVARCHAR NULL, Contents VARBINARY(max) NULL, Picture VARBINARY(max) NULL) GO |
(2) 在上面的语句中,创建了一个LOBTable表,注意,其中Contents和Picture字段使用了varbinary(max)类型来存储数据。然后插入第一条记录:
INSERT INTO LOBTable
(Name,Numb,Class,Contents,Picture)
SELECT 'Peter' AS Name,
'21001' AS Numb,
'72301' AS Class,
* FROM OPENROWSET(BULK 'C:\Peter.txt', SINGLE_BLOB) AS Contents,
OPENROWSET(BULK 'C:\Peter.JPG', SINGLE_BLOB) AS Picture
GO
(3) 执行该语句,结果如图12.47所示。
![]() |
| 图12.47 大对象INSERT INTO语句的执行结果 |
(4) 可以继续执行如下语句:
SELECT *
FROM LOBTable
(5) 查询结果如图12.48所示。
| 图12.48 大对象的查询 |
在上面的语句中,使用了OPENOWSET 函数将文字文件(.txt)和图像文件(.JPG)的内容直接存入LOBTABLE表Contents字段和Picture字段中。这里假设Peter.txt、Peter.JPG、William.txt和William.JPG都已经放在C盘根目录下。
| 回书目 上一节 下一节 |