引用﹕
1、启动 Microsoft Search 服务
开始菜单--> SQL程序组--> 服务管理器--> 下拉筐--> Microsoft Search 服务--> 启动它
2、
..\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\目录里建一个非空noise.chs文件
非空noise.chs文件,也有人说是空的noise.chs文件,但我每次都往里写几个没用的字母。
3、建立环境
打开查询分析器--> 执行下列脚本:
--------------------------------------------
create database test ---创建test数据库
use test ---选择test数据库
create table dali (ID int not null primary key,MyImage image,FileType varchar(255),FileNmae varchar(255)) ---创建dali表
--dali表中 Id,MyImage,FileType 三列是必须的,因为要对image列索引的话,必须要有一个主键列,一个image列,一个存放文件类型的列
--我们知道在windows系统中文件类型是靠扩展名来区分的所以FileType列也就是用来放 文件的扩展名
--------------------------------------------
sp_fulltext_database 'enable ' --为全文索引启用数据库
sp_fulltext_catalog 'My_FullDir ', 'create ' ---创建一个叫My_FullDif的全文目录
declare @Key sysname ; select @Key=c.name from syscolumns a,sysconstraints b,sysobjects c where a.id=object_id( 'dali ') and a.name= 'ID ' and a.id=b.id and b.constid=c.id and c.name like 'PK% '
exec sp_fulltext_table 'dali ', 'create ', 'My_FullDir ',@Key ----这两句是为全文索引,对表进行标记
sp_fulltext_column 'dali ', 'MyImage ', 'add ',0x0804, 'FileType ' ---这句是指定MyImage列为全文索引列,FileType是类型列
------------------------------------------------
4、在c盘下放一个扩展名为doc的word文件,一个扩展名为xls的excel文件,一个扩展名为htm的网页文件,个扩展名为bmp的图片
共4个,大家可根据实际情况放入!
5、插入数据
建立下面这个存储过程
--------------------------------------------------
CREATE PROCEDURE sp_textcopy
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1)
AS
/* 这是使用textcopy工具将文件插入到数据库中,如果有前台工具可以用前台开发工具将文件插入,这里为了演示 */
DECLARE @exec_str varchar (255)
SELECT @exec_str= 'textcopy /S '+@srvname+ ' /U '+@login+ ' /P '+@password+ ' /D '+@dbname+ ' /T '+@tbname+ ' /C '+@colname+ ' /W " '+@whereclause+ ' " /F " '+@filename+ ' " / '+@direction
EXEC master..xp_cmdshell @exec_str
----------------------------------------------------
insert dali values(1,0x, 'doc ', '大力的doc ') ---其中第二列是 0x 它是一个16进制数对应image列,是必须的,不要写null,第三列是文件类型,既扩展名
sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', 'test ', 'dali ', 'MyImage ', 'c:\大力的doc.doc ', 'where ID=1 ', 'I '
-------依次参数是:实例名,用户名,密码,数据库名,表名,image列名,路径及文件名,条件(你必须保证它只选择一行),I
---------------------------------------------------------------------------------------------------------------------
insert dali values(2,0x, 'bmp ', '图片 ')
sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', 'test ', 'dali ', 'MyImage ', 'c:\图片.bmp ', 'where ID=2 ', 'I ' --注意条件是 ID=2
insert dali values(3,0x, 'xls ', 'Excel文件 ')
sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', 'test ', 'dali ', 'MyImage ', 'c:\Excel文件.xls ', 'where ID=3 ', 'I ' --注意条件是 ID=3
insert dali values(4,0x, 'htm ', '网页 ')
sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', 'test ', 'dali ', 'MyImage ', 'c:\网页.htm ', 'where ID=4 ', 'I ' --注意条件是 ID=4
----------上面的语句,要保证类型一样,路径正确,条件唯一正确应该就可以了
6、填充全文索引
sp_fulltext_table 'dali ', 'start_full ' ---第一个参数是表名,第二个参数是启动表的全文索引的完全填充
7、可以开始你的实验了
select * from dali where contains(MyImage, 'J老师 ')
select * from dali where contains(MyImage, '海老师 ')
------END----------
--调试环境:SQLServer2000企业版、Windows2000高级服务器
導入導出二進制文件
/*--bcp 实现二进制文件的导入导出
支持image,text,ntext字段的导入/导出
image适合于二进制文件,包括:Word文档,Excel文档,图片,音乐等
text,ntext适合于文本数据文件
注意:导入时,将覆盖满足条件的所有行
导出时,将把所有满足条件的行导出到指定文件中
此存储过程仅用bcp实现
邹建 2003.08-----------------*/
/*--调用示例
--数据导出
exec p_binaryIO 'zj ', ' ', ' ', 'acc_演示数据..tb ', 'img ', 'c:\zj1.dat '
--数据导入
exec p_binaryIO 'zj ', ' ', ' ', 'acc_演示数据..tb ', 'img ', 'c:\zj1.dat ', ' ',0
--*/
if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[p_binaryIO] ') and OBJECTPROPERTY(id, N 'IsProcedure ') = 1)
drop procedure [dbo].[p_binaryIO]
GO
Create proc p_binaryIO
@servename varchar (30),--服务器名称
@username varchar (30), --用户名
@password varchar (30), --密码
@tbname varchar (500), --数据库..表名
@fdname varchar (30), --字段名
@fname varchar (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+_temp
@tj varchar (1000)= ' ', --处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀
@isout bit=1 --1导出((默认),0导入
AS
declare @fname_in varchar(1000) --bcp处理应答文件名
,@fsize varchar(20) --要处理的文件的大小
,@m_tbname varchar(50) --临时表名
,@sql varchar(8000)
--则取得导入文件的大小
if @isout=1
set @fsize= '0 '
else
begin
create table #tb(可选名 varchar(20),大小 int
,创建日期 varchar(10),创建时间 varchar(20)
,上次写操作日期 varchar(10),上次写操作时间 varchar(20)
,上次访问日期 varchar(10),上次访问时间 varchar(20),特性 int)
insert into #tb
exec master..xp_getfiledetails @fname
select @fsize=大小 from #tb
drop table #tb
if @fsize is null
begin
print '文件未找到 '
return
end
end
--生成数据处理应答文件
set @m_tbname= '[##temp '+cast(newid() as varchar(40))+ '] '
set @sql= 'select * into '+@m_tbname+ ' from(
select null as 类型
union all select 0 as 前缀
union all select '+@fsize+ ' as 长度
union all select null as 结束
union all select null as 格式
) a '
exec(@sql)
select @fname_in=@fname+ '_temp '
,@sql= 'bcp " '+@m_tbname+ ' " out " '+@fname_in
+ ' " /S " '+@servename
+case when isnull(@username, ' ')= ' ' then ' '
else ' " /U " '+@username end
+ ' " /P " '+isnull(@password, ' ')+ ' " /c '
exec master..xp_cmdshell @sql
--删除临时表
set @sql= 'drop table '+@m_tbname
exec(@sql)
if @isout=1
begin
set @sql= 'bcp "select top 1 '+@fdname+ ' from '
+@tbname+case isnull(@tj, ' ') when ' ' then ' '
else ' where '+@tj end
+ ' " queryout " '+@fname
+ ' " /S " '+@servename
+case when isnull(@username, ' ')= ' ' then ' '
else ' " /U " '+@username end
+ ' " /P " '+isnull(@password, ' ')
+ ' " /i " '+@fname_in+ ' " '
exec master..xp_cmdshell @sql
end
else
begin
--为数据导入准备临时表
set @sql= 'select top 0 '+@fdname+ ' into '
+@m_tbname+ ' from ' +@tbname
exec(@sql)
--将数据导入到临时表
set @sql= 'bcp " '+@m_tbname+ ' " in " '+@fname
+ ' " /S " '+@servename
+case when isnull(@username, ' ')= ' ' then ' '
else ' " /U " '+@username end
+ ' " /P " '+isnull(@password, ' ')
+ ' " /i " '+@fname_in+ ' " '
exec master..xp_cmdshell @sql
--将数据导入到正式表中
set @sql= 'update '+@tbname
+ ' set '+@fdname+ '=b. '+@fdname
+ ' from '+@tbname+ ' a, '
+@m_tbname+ ' b '
+case isnull(@tj, ' ') when ' ' then ' '
else ' where '+@tj end
exec(@sql)
--删除数据处理临时表
set @sql= 'drop table '+@m_tbname
end
--删除数据处理应答文件
set @sql= 'del '+@fname_in
exec master..xp_cmdshell @sql
go
1、启动 Microsoft Search 服务
开始菜单--> SQL程序组--> 服务管理器--> 下拉筐--> Microsoft Search 服务--> 启动它
2、
..\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\目录里建一个非空noise.chs文件
非空noise.chs文件,也有人说是空的noise.chs文件,但我每次都往里写几个没用的字母。
3、建立环境
打开查询分析器--> 执行下列脚本:
--------------------------------------------
create database test ---创建test数据库
use test ---选择test数据库
create table dali (ID int not null primary key,MyImage image,FileType varchar(255),FileNmae varchar(255)) ---创建dali表
--dali表中 Id,MyImage,FileType 三列是必须的,因为要对image列索引的话,必须要有一个主键列,一个image列,一个存放文件类型的列
--我们知道在windows系统中文件类型是靠扩展名来区分的所以FileType列也就是用来放 文件的扩展名
--------------------------------------------
sp_fulltext_database 'enable ' --为全文索引启用数据库
sp_fulltext_catalog 'My_FullDir ', 'create ' ---创建一个叫My_FullDif的全文目录
declare @Key sysname ; select @Key=c.name from syscolumns a,sysconstraints b,sysobjects c where a.id=object_id( 'dali ') and a.name= 'ID ' and a.id=b.id and b.constid=c.id and c.name like 'PK% '
exec sp_fulltext_table 'dali ', 'create ', 'My_FullDir ',@Key ----这两句是为全文索引,对表进行标记
sp_fulltext_column 'dali ', 'MyImage ', 'add ',0x0804, 'FileType ' ---这句是指定MyImage列为全文索引列,FileType是类型列
------------------------------------------------
4、在c盘下放一个扩展名为doc的word文件,一个扩展名为xls的excel文件,一个扩展名为htm的网页文件,个扩展名为bmp的图片
共4个,大家可根据实际情况放入!
5、插入数据
建立下面这个存储过程
--------------------------------------------------
CREATE PROCEDURE sp_textcopy
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1)
AS
/* 这是使用textcopy工具将文件插入到数据库中,如果有前台工具可以用前台开发工具将文件插入,这里为了演示 */
DECLARE @exec_str varchar (255)
SELECT @exec_str= 'textcopy /S '+@srvname+ ' /U '+@login+ ' /P '+@password+ ' /D '+@dbname+ ' /T '+@tbname+ ' /C '+@colname+ ' /W " '+@whereclause+ ' " /F " '+@filename+ ' " / '+@direction
EXEC master..xp_cmdshell @exec_str
----------------------------------------------------
insert dali values(1,0x, 'doc ', '大力的doc ') ---其中第二列是 0x 它是一个16进制数对应image列,是必须的,不要写null,第三列是文件类型,既扩展名
sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', 'test ', 'dali ', 'MyImage ', 'c:\大力的doc.doc ', 'where ID=1 ', 'I '
-------依次参数是:实例名,用户名,密码,数据库名,表名,image列名,路径及文件名,条件(你必须保证它只选择一行),I
---------------------------------------------------------------------------------------------------------------------
insert dali values(2,0x, 'bmp ', '图片 ')
sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', 'test ', 'dali ', 'MyImage ', 'c:\图片.bmp ', 'where ID=2 ', 'I ' --注意条件是 ID=2
insert dali values(3,0x, 'xls ', 'Excel文件 ')
sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', 'test ', 'dali ', 'MyImage ', 'c:\Excel文件.xls ', 'where ID=3 ', 'I ' --注意条件是 ID=3
insert dali values(4,0x, 'htm ', '网页 ')
sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', 'test ', 'dali ', 'MyImage ', 'c:\网页.htm ', 'where ID=4 ', 'I ' --注意条件是 ID=4
----------上面的语句,要保证类型一样,路径正确,条件唯一正确应该就可以了
6、填充全文索引
sp_fulltext_table 'dali ', 'start_full ' ---第一个参数是表名,第二个参数是启动表的全文索引的完全填充
7、可以开始你的实验了
select * from dali where contains(MyImage, 'J老师 ')
select * from dali where contains(MyImage, '海老师 ')
------END----------
--调试环境:SQLServer2000企业版、Windows2000高级服务器
導入導出二進制文件
/*--bcp 实现二进制文件的导入导出
支持image,text,ntext字段的导入/导出
image适合于二进制文件,包括:Word文档,Excel文档,图片,音乐等
text,ntext适合于文本数据文件
注意:导入时,将覆盖满足条件的所有行
导出时,将把所有满足条件的行导出到指定文件中
此存储过程仅用bcp实现
邹建 2003.08-----------------*/
/*--调用示例
--数据导出
exec p_binaryIO 'zj ', ' ', ' ', 'acc_演示数据..tb ', 'img ', 'c:\zj1.dat '
--数据导入
exec p_binaryIO 'zj ', ' ', ' ', 'acc_演示数据..tb ', 'img ', 'c:\zj1.dat ', ' ',0
--*/
if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[p_binaryIO] ') and OBJECTPROPERTY(id, N 'IsProcedure ') = 1)
drop procedure [dbo].[p_binaryIO]
GO
Create proc p_binaryIO
@servename varchar (30),--服务器名称
@username varchar (30), --用户名
@password varchar (30), --密码
@tbname varchar (500), --数据库..表名
@fdname varchar (30), --字段名
@fname varchar (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+_temp
@tj varchar (1000)= ' ', --处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀
@isout bit=1 --1导出((默认),0导入
AS
declare @fname_in varchar(1000) --bcp处理应答文件名
,@fsize varchar(20) --要处理的文件的大小
,@m_tbname varchar(50) --临时表名
,@sql varchar(8000)
--则取得导入文件的大小
if @isout=1
set @fsize= '0 '
else
begin
create table #tb(可选名 varchar(20),大小 int
,创建日期 varchar(10),创建时间 varchar(20)
,上次写操作日期 varchar(10),上次写操作时间 varchar(20)
,上次访问日期 varchar(10),上次访问时间 varchar(20),特性 int)
insert into #tb
exec master..xp_getfiledetails @fname
select @fsize=大小 from #tb
drop table #tb
if @fsize is null
begin
print '文件未找到 '
return
end
end
--生成数据处理应答文件
set @m_tbname= '[##temp '+cast(newid() as varchar(40))+ '] '
set @sql= 'select * into '+@m_tbname+ ' from(
select null as 类型
union all select 0 as 前缀
union all select '+@fsize+ ' as 长度
union all select null as 结束
union all select null as 格式
) a '
exec(@sql)
select @fname_in=@fname+ '_temp '
,@sql= 'bcp " '+@m_tbname+ ' " out " '+@fname_in
+ ' " /S " '+@servename
+case when isnull(@username, ' ')= ' ' then ' '
else ' " /U " '+@username end
+ ' " /P " '+isnull(@password, ' ')+ ' " /c '
exec master..xp_cmdshell @sql
--删除临时表
set @sql= 'drop table '+@m_tbname
exec(@sql)
if @isout=1
begin
set @sql= 'bcp "select top 1 '+@fdname+ ' from '
+@tbname+case isnull(@tj, ' ') when ' ' then ' '
else ' where '+@tj end
+ ' " queryout " '+@fname
+ ' " /S " '+@servename
+case when isnull(@username, ' ')= ' ' then ' '
else ' " /U " '+@username end
+ ' " /P " '+isnull(@password, ' ')
+ ' " /i " '+@fname_in+ ' " '
exec master..xp_cmdshell @sql
end
else
begin
--为数据导入准备临时表
set @sql= 'select top 0 '+@fdname+ ' into '
+@m_tbname+ ' from ' +@tbname
exec(@sql)
--将数据导入到临时表
set @sql= 'bcp " '+@m_tbname+ ' " in " '+@fname
+ ' " /S " '+@servename
+case when isnull(@username, ' ')= ' ' then ' '
else ' " /U " '+@username end
+ ' " /P " '+isnull(@password, ' ')
+ ' " /i " '+@fname_in+ ' " '
exec master..xp_cmdshell @sql
--将数据导入到正式表中
set @sql= 'update '+@tbname
+ ' set '+@fdname+ '=b. '+@fdname
+ ' from '+@tbname+ ' a, '
+@m_tbname+ ' b '
+case isnull(@tj, ' ') when ' ' then ' '
else ' where '+@tj end
exec(@sql)
--删除数据处理临时表
set @sql= 'drop table '+@m_tbname
end
--删除数据处理应答文件
set @sql= 'del '+@fname_in
exec master..xp_cmdshell @sql
go