SQLServer2005-善用OPENROWSET函数来存取大型对象(LOB)
2008-04-28 00:51
330 查看
我们在「2005档案IO与资料存取秘诀」一书的第七章,详细探讨了如何于前端程序处理大型对象(LOB)。有读者询问,2005本身是否提供任何的Transact-SQL陈述式来处理LOB呢?答案当然是肯定的,而且具备相关处理能力的Transact-SQL陈述式还不只一个。不过在本文中,我们将把焦点摆在OPENROWSET函数。
SQLServer2005的OPENROWSET函数能够一次就完成远程数据的连结与存取作业。OPENROWSET函数在使用的形式上就好比是一个资料表,比方说,您可以在SELECT陈述式的FROM子句中参考OPENROWSET函数,此外,视OLEDB提供者的能力而定,您也可以在INSERT、UPDATE或DELETE陈述式中把OPENROWSET函数当成目标数据表来使用。
特别值得一提的是,SQLServer2005替OPENROWSET函数加入了BULK数据列集提供者,使得您可以直接从文字文件、文件、以及图档…等档案中读取数据。此意味着,从现在开始,您可以在一道非常简单的INSERTINTO…SELECT陈述式中使用OPENROWSET函数来将内含大量数据的档案内容存入数据表的字段中。
OPENROWSETBULK选项自变量可以精确控制数据读取的开始与结束位置、如何处理错误、以及资料要如何被解译。比方说,您可以要求将数据文件读取成varbinary、varchar或nvarchar型别的单一数据列与单一字段的数据列集。
我想光说不练是没有用的在,以下的程序代码中,我们会先建立一个数据表,然后使用INSERTINTO…SELECT陈述式来新数据记录。请特别注意我们如何使用OPENROWSET函数将文字文件(.txt)与图档(.jpg)的内容直接存入数据表的「自传」与「玉照」字段中:
USE北风贸易;
GO
IF EXISTS(SELECT*FROMsys.objectsWHEREobject_id=
OBJECT_ID(N'dbo.练习资料表')ANDtypein(N'U'))
DROPTABLEdbo.练习资料表
GO
--建立数据表
CREATETABLEdbo.练习资料表(
编号intIDENTITY(1,1)NOTNULL,
姓名nvarchar(10)NULL,
性别nvarchar(2)NULL,
自传nvarchar(max)NULL,
玉照varbinary(max)NULL,
);
GO
--新增第一笔数据(包括NCLOB与BLOB在内)
INSERTINTOdbo.练习资料表
(
姓名,
性别,
自传,
玉照
)
SELECT'章立民'AS姓名,'男'AS性别,
*FROM
OPENROWSET
(BULK'C:/Temp/Employee-A156401174.txt',SINGLE_NCLOB)AS自传,
OPENROWSET
(BULK'C:/Temp/Employee-A156401174.jpg',SINGLE_BLOB)AS玉照;
GO
--新增第二笔数据(包括NCLOB与BLOB在内)
INSERTINTOdbo.练习资料表
(
姓名,
性别,
自传,
玉照
)
SELECT'章立民'AS姓名,'男'AS性别,
*FROM
OPENROWSET
(BULK'C:/Temp/Employee-A156401174.txt',SINGLE_NCLOB)AS自传,
OPENROWSET
(BULK'C:/Temp/Employee-A156404535.jpg',SINGLE_BLOB)AS玉照;
GO
章立民研究室敬上 http://www.cnblogs.com/liminzhang/archive/2006/10/18/532140.html
SQLServer2005的OPENROWSET函数能够一次就完成远程数据的连结与存取作业。OPENROWSET函数在使用的形式上就好比是一个资料表,比方说,您可以在SELECT陈述式的FROM子句中参考OPENROWSET函数,此外,视OLEDB提供者的能力而定,您也可以在INSERT、UPDATE或DELETE陈述式中把OPENROWSET函数当成目标数据表来使用。
特别值得一提的是,SQLServer2005替OPENROWSET函数加入了BULK数据列集提供者,使得您可以直接从文字文件、文件、以及图档…等档案中读取数据。此意味着,从现在开始,您可以在一道非常简单的INSERTINTO…SELECT陈述式中使用OPENROWSET函数来将内含大量数据的档案内容存入数据表的字段中。
OPENROWSETBULK选项自变量可以精确控制数据读取的开始与结束位置、如何处理错误、以及资料要如何被解译。比方说,您可以要求将数据文件读取成varbinary、varchar或nvarchar型别的单一数据列与单一字段的数据列集。
我想光说不练是没有用的在,以下的程序代码中,我们会先建立一个数据表,然后使用INSERTINTO…SELECT陈述式来新数据记录。请特别注意我们如何使用OPENROWSET函数将文字文件(.txt)与图档(.jpg)的内容直接存入数据表的「自传」与「玉照」字段中:
USE北风贸易;
GO
IF EXISTS(SELECT*FROMsys.objectsWHEREobject_id=
OBJECT_ID(N'dbo.练习资料表')ANDtypein(N'U'))
DROPTABLEdbo.练习资料表
GO
--建立数据表
CREATETABLEdbo.练习资料表(
编号intIDENTITY(1,1)NOTNULL,
姓名nvarchar(10)NULL,
性别nvarchar(2)NULL,
自传nvarchar(max)NULL,
玉照varbinary(max)NULL,
);
GO
--新增第一笔数据(包括NCLOB与BLOB在内)
INSERTINTOdbo.练习资料表
(
姓名,
性别,
自传,
玉照
)
SELECT'章立民'AS姓名,'男'AS性别,
*FROM
OPENROWSET
(BULK'C:/Temp/Employee-A156401174.txt',SINGLE_NCLOB)AS自传,
OPENROWSET
(BULK'C:/Temp/Employee-A156401174.jpg',SINGLE_BLOB)AS玉照;
GO
--新增第二笔数据(包括NCLOB与BLOB在内)
INSERTINTOdbo.练习资料表
(
姓名,
性别,
自传,
玉照
)
SELECT'章立民'AS姓名,'男'AS性别,
*FROM
OPENROWSET
(BULK'C:/Temp/Employee-A156401174.txt',SINGLE_NCLOB)AS自传,
OPENROWSET
(BULK'C:/Temp/Employee-A156404535.jpg',SINGLE_BLOB)AS玉照;
GO
章立民研究室敬上 http://www.cnblogs.com/liminzhang/archive/2006/10/18/532140.html
相关文章推荐
- SQL Server 2005 - 善用 OPENROWSET 函数来存取大型对象(LOB)
- SQL Server 2005 - 善用 OPENROWSET 函数来存取大型对象(LOB)
- SQL Server 2005 - 善用 OPENROWSET 函数来存取大型对象(LOB)
- 使用JDBC处理LOB大型对象
- 展示JDBC存取ORACLE大型数据对象CLOB几种情况的示范类
- JDBC存取ORACLE大型数据对象CLOB几种情况的示范类
- LOB对象介绍
- HTML5 利用json对象来存取复杂数据
- 使用缓存区对象存取像素矩形数据
- 使用 hibernate 存取大对象数据类型(clob和blob)
- ORACLE LOB 大对象处理
- ASP.NET 2.0 - 善用 SqlDataSource 对象的 CancelSelectOnNullParameter 属性
- 在DELPHI程序中使用ADO对象存取ODBC
- 深度探索C++对象模型----data member的存取
- js创建一个MAP对象并存取值
- js创建一个MAP对象并存取值
- 书讯 -- 一致化对象与数据的存取 LINQ
- C#+MySQL操作Blob对象,实现位图存取
- 【面向对象设计基础】存取方法+Private类成员和方法
- CLR 全面透彻解析:大型对象堆揭秘