22,209
社区成员
发帖
与我相关
我的任务
分享
/*=================== 导入/导出 Excel 的基本方法 ===================*/
从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:
/*===================================================================*/
--如果接受数据导入的表已经存在
insert into 表 select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)
--如果导入数据并生成表
select * into 表 from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)
/*===================================================================*/
--从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)
select * from 表
--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:
--导出表的情况
EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名 out "c:\test.xls" /c /S"服务器名" /U"用户名" -P"密码"'
--导出查询的情况
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout "c:\test.xls" /c /S"服务器名" /U"用户名" -P"密码"'
/*--说明:
c:\test.xls 为导入/导出的Excel文件名.要求文件在SQL服务器上,或者SQL服务器可以访问的共享目录上
sheet1$ 为Excel文件的工作表名,一般要加上$才能正常使用.
--*/
/*=================== 导入/导出 dBase 的基本方法 ===================*/
从dBase文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:
/*===================================================================*/
--如果接受数据导入的表已经存在
insert into 表 select * from
openrowset('MICROSOFT.JET.OLEDB.4.0'
,'dBase 5.0;DATABASE=c:\','select * from [test.dbf]')
--如果导入数据并生成表
select * into 表 from
openrowset('MICROSOFT.JET.OLEDB.4.0'
,'dBase 5.0;DATABASE=c:\','select * from [test.dbf]')
/*===================================================================*/
--如果从SQL数据库中,导出数据到dBase,如果dBase文件已经存在,就可以简单的用:
insert into
openrowset('MICROSOFT.JET.OLEDB.4.0'
,'dBase 5.0;DATABASE=c:\','select * from [test.dbf]')
select * from 表
/*--说明:
DATABASE=c:\ c:\是dbf文件的存放目录
'select * from [test.dbf] test.dbf是指dbf文件名
--*/
--数据导入导出(全).sql
if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)
drop procedure File2Table
go
/*--实现数据导入/导出的存储过程
可以实现导入/导出 整个数据库/指定表 到文本文件
--邹建 2003.07(引用请保留此信息)--*/
/*--调用示例
--导出指定表
exec file2table @tbname=N'jobs,pub_info',@filename='c:\[@tbname].txt'
--导出所有表
exec file2table @filename='c:\[@dbname]_[@tbname].txt'
--导入所有表
exec file2table @filename='c:\[@dbname]_[@tbname].txt',@isout=0
--*/
create procedure File2Table
@tbname nvarchar(4000)='', --表名列表,如果不指定,则表示所有用户表
@filename nvarchar(1000)='', --导出的文件名,如果不指定,导出到SQL Server的默认备份目录\[@dbname]_[@tbname].txt,其中[@dbname]在处理中会替换为数据库名,[@dbname]会用表名代替
@isout bit=1, --1为导出(默认),0为导入
@username sysname='', --用户名,如果sql不允许使用NT验证方式登录,则必须指定
@password sysname='', --密码
@code char(1)=N'N' --文件编码,可以是n,c,N,W,作用参考bcp语法(如果是数据传输需要,建议用N)
as
declare @s nvarchar(4000)
if isnull(@code,N'') not in(N'n',N'c',N'N',N'W')
set @code='N'
--备份文件名
if isnull(@filename,N'')=N''
begin
select top 1 @filename=rtrim(reverse(filename))
from master.dbo.sysfiles
where name=N'master'
select @filename=stuff(@filename,1,charindex('\',@filename),N'')
,@filename=reverse(stuff(@filename,1,charindex('\',@filename),N''))
+N'\BACKUP\'+db_name()+N'_[@tbname].txt'
end
else
set @filename=replace(@filename,N'[@dbname]',db_name())
declare tb cursor local
for
select N'bcp "'+db_name()
+N'.'+quotename(user_name(uid))
+N'.'+quotename(name)
+N'"'
+case when @isout=1 then N' out' else N' in' end
+N' "'
+replace(@filename,N'[@tbname]',name)
+N'" /'+@code
+case when isnull(@username,N'')=N'' then N' /T'
else N' /U"'+@username
+N'" /P"'+isnull(@password,N'')+N'"'
end
from sysobjects
where xtype=N'U' and status>=0
and(isnull(@tbname,N'')=''
or charindex(','+name+',',','+@tbname+',')>0)
open tb
fetch tb into @s
while @@fetch_status=0
begin
exec master..xp_cmdshell @s,no_output
fetch tb into @s
end
close tb
deallocate tb
go
LZ 你作文啊???