我们在「Visual Basic 2005 档案 IO 与资料 存取 秘诀」一书的第七章,详细探讨了如何于前端程序处理 大型 对象 (LOB)。有读者询问,sql server (WINDOWS平台上强大的数据库平台) 2005 本身是否提供任何的 Transact-SQL 陈述式来处理 LOB 呢?答案当然是肯
我们在「Visual Basic 2005 档案 IO 与资料 存取 秘诀」一书的第七章,详细探讨了如何于前端程序处理 大型 对象 (LOB)。有读者询问,sql server (WINDOWS平台上强大的数据库平台) 2005 本身是否提供任何的 Transact-SQL 陈述式来处理 LOB 呢?答案当然是肯定的,而且具备相关处理能力的 Transact-SQL 陈述式还不只一个。不过在本文中,我们将把焦点摆在 OPENROWSET 函数 。
sql server (WINDOWS平台上强大的数据库平台) 2005 的 OPENROWSET 函数 能够一次就完成远程数据的连结与 存取 作业。OPENROWSET 函数 在使用的形式上就好比是一个资料表,比方说,您可以在 SELECT 陈述式的 FROM 子句中参考 OPENROWSET 函数 ,此外,视 OLE DB 提供者的能力而定,您也可以在 INSERT、UPDATE 或 DELETE 陈述式中把 OPENROWSET 函数 当成目标数据表来使用。
特别值得一提的是,sql server (WINDOWS平台上强大的数据库平台) 2005 替 OPENROWSET 函数 加入了 BULK 数据列集提供者,使得您可以直接从文字文件、xml (标准化越来越近了) 文件、以及图档…等档案中读取数据。此意味着,从现在开始,您可以在一道非常简单的 INSERT INTO…SELECT 陈述式中使用 OPENROWSET 函数 来将内含大量数据的档案内容存入数据表的字段中。
OPENROWSET BULK 选项自变量可以精确控制数据读取的开始与结束位置、如何处理错误、以及资料要如何被解译。比方说,您可以要求将数据文件读取成 varbinary、varchar 或 nvarchar 型别的单一数据列与单一字段的数据列集。
我想光说不练是没有用的在,以下的程序代码中,我们会先建立一个数据表,然后使用 INSERT INTO…SELECT 陈述式来新数据记录。请特别注意我们如何使用 OPENROWSET 函数 将文字文件(.txt)与图档(.jpg)的内容直接存入数据表的「自传」与「玉照」字段中:
USE 北风贸易; GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.练习资料表') AND type in (N'U')) DROP TABLE dbo.练习资料表 GO
--建立数据表 CREATE TABLE dbo.练习资料表( 编号 int IDENTITY(1,1) NOT NULL, 姓名 nvarchar(10) NULL, 性别 nvarchar(2) NULL, 自传 nvarchar(max) NULL, 玉照 varbinary(max) NULL, ); GO
--新增第一笔数据(包括 NCLOB 与 BLOB 在内) INSERT INTO dbo.练习资料表 ( 姓名, 性别, 自传, 玉照 ) 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 在内) INSERT INTO dbo.练习资料表 ( 姓名, 性别, 自传, 玉照 ) 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://HdhCmsTestcnblogs测试数据/liminzhang/archive/2006/10/18/532140.html