日期:2014-05-18  浏览次数:20418 次

SQL2000数据写入及导出问题
如何将文件写入数据库中,再将该数据导出为原来的文件..SQL语句如何实现?

------解决方案--------------------
可利用textcopy.exe文件实现在数据库中存储/读取文件。

textcopy.exe文件可以在SQL Server安装光盘中找到。
在安装目录C:\Program Files\Microsoft SQL Server\MSSQL\Binn\下也有。
------解决方案--------------------
/*
创建测试
*/
create table test (id int, files image) --用image类型字段保存文件
insert test select 1,0x --将文件保存到files字段时,必须先初始化为0x

/*
命令提示符下输入:
*/

--将D:\01.doc文件保存到test.files,条件id=1
textcopy /S "服务器名 " /U 用户名 /P 密码 /D 数据库名 /T test /C files /W "where id=1 " /F "D:\01.doc " /I

--下面读出到E:\01.doc
textcopy /S "服务器名 " /U 用户名 /P 密码 /D 数据库名 /T test /C files /W "where id=1 " /F "E:\01.doc " /O

/*
删除测试
*/
--drop table test

------解决方案--------------------
--将textcopy.exe写成存储过程

create procedure sp_textcopy
@Server varchar(30), --服务器名
@User varchar(30), --用户名
@Password varchar(30), --密码
@DBName varchar(30), --数据库名
@TBName varchar(30), --表名
@ColName varchar(30), --存储文件的字段名
@FileName varchar(30), --要存取的文件名
@Where varchar(40), --条件
@Direction varchar(1) --I 为存储到数据库,O 从数据库中读出成文件
as
declare @Cmd varchar(255)
select @Cmd = 'textcopy /S " ' + @Server + ' " /U ' + @User + ' /P ' + @Password + ' /D ' + @DBName + ' /T ' + @TBName + ' /C ' + @ColName + ' /W " ' + @Where + ' " /F " ' + @FileName + ' " / ' + @Direction
exec master..xp_cmdshell @Cmd,no_output
go
------解决方案--------------------
--保存
exec sp_textcopy '服务器名 ', '用户名 ', '密码 ', '数据库 ', '表名 ', '列名 ', '文件名 ', 'where 条件 ', 'I '

--读取
exec sp_textcopy '服务器名 ', '用户名 ', '密码 ', '数据库 ', '表名 ', '列名 ', '文件名 ', 'where 条件 ', 'O '

------解决方案--------------------
用BCP语句吧~

语法很容易,自己去联机帮助上看看吧

bcp共有四个动作可以选择。
(1) 导入。
这个动作使用in命令完成,后面跟需要导入的文件名。
(2) 导出。
这个动作使用out命令完成,后面跟需要导出的文件名。
(3) 使用SQL语句导出。
这个动作使用queryout命令完成,它跟out类似,只是数据源不是表或视图名,而是SQL语句。
(4) 导出格式文件。
这个动作使用format命令完成,后而跟格式文件名。

。。。。。。。。


导出:bcp "select * from dbDaily.dbo.aaaaa with (nolock) where 更新 between '%date% ' and dateadd(day,1, '%date% ') " queryout %folder%dbo.aaaaa.dat -S%SvNm% -U%Usr% -P%Pwd% -n

导入:bcp dbDaily.account.aaaaa in dbo.aaaaa.dat -S%SvNm% -U%Usr% -P%Pwd% -n -b1000