我们在「
Visual Basic 2005
档案
IO
与资料存取秘诀」
一书的第七章,详细探讨了如何于前端程序处理大型对象(
LOB
)。有读者询问,
SQL Server 2005
本身是否提供任何的
Transact-SQL
陈述式来处理
LOB
呢?答案当然是肯定的,而且具备相关处理能力的
Transact-SQL
陈述式还不只一个。不过在本文中,我们将把焦点摆在
OPENROWSET
函数。
SQL Server 2005
的
OPENROWSET
函数能够一次就完成远程数据的连结与存取作业。
OPENROWSET
函数在使用的形式上就好比是一个资料表,比方说,您可以在
SELECT
陈述式的
FROM
子句中参考
OPENROWSET
函数,此外,视
OLE DB
提供者的能力而定,您也可以在
INSERT
、
UPDATE
或
DELETE
陈述式中把
OPENROWSET
函数当成目标数据表来使用。
特别值得一提的是,
SQL Server 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
本文出自 “章立民” 博客,转载请与作者联系!