SQL语句导入导出大全[收集]
正巧这两天要用到这个,上网找到一个,回来自己检测一下:
/*******  导出到excel
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -

S"GNETDATA/GNETDATA" -U"sa" -P""'

/***********  导入Excel
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel

5.0')...xactions

/*动态文件名
declare @fn varchar(20),@s varchar(1000)
set @fn = 'c:\test.xls'
set @s ='''Microsoft.Jet.OLEDB.4.0'',
''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0'''
set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$'
exec(@s)
*/

SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+' ' 转换后的别名
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel

5.0')...xactions

/********************** EXCEL导到远程SQL
insert OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=远程ip;User ID=sa;Password=密码'
         ).库名.dbo.表名 (列名1,列名2)
SELECT 列名1,列名2
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel

5.0')...xactions


/** 导入文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -

Ppassword'

/** 导出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -

Ppassword'

EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -

Sservername -Usa -Ppassword'

导出到TXT文本,用逗号分开
exec master..xp_cmdshell 'bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password'


BULK INSERT 库名..表名
FROM 'c:\test.txt'
WITH (
    FIELDTERMINATOR = ';',
    ROWTERMINATOR = '\n'
)


--/* dBase IV文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]')
--*/

--/* dBase III文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]')
--*/

--/* FoxPro 数据库
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
--*/

/**************导入DBF文件****************/
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF',
'select * from customer where country != "USA" order by country')
go
/***************** 导出到DBF ***************/
如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句

insert into openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
select * from 表

说明:
SourceDB=c:\  指定foxpro表所在的文件夹
aa.DBF        指定foxpro表的文件名.

 


/*************导出到Access********************/
insert into openrowset('Microsoft.Jet.OLEDB.4.0',
   'x:\A.mdb';'admin';'',A表) select * from 数据库名..B表

/*************导入Access********************/
insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0',
   'x:\A.mdb';'admin';'',A表)

文件名为参数
declare @fname varchar(20)
set @fname = 'd:\test.mdb'
exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',
    '''+@fname+''';''admin'';'''', topics) as a ')

SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="f:\northwind.mdb";Jet OLEDB:Database Password=123;User

ID=Admin;Password=;')...产品

*********************  导入 xml 文件

DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc ='
<root>
  <Customer cid= "C1" name="Janine" city="Issaquah">
      <Order o'

--连接数据库
exec @err=sp_oacreate 'adodb.connection',@obj out
if @err<>0 goto lberr

exec @err=sp_oamethod @obj,'open',null,@constr
if @err<>0 goto lberr

--创建表的SQL
declare @tbname sysname
set @tbname='##tmp_'+convert(varchar(38),newid())
set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a'
exec(@sql)

select @sql='',@fdlist=''
select @fdlist=@fdlist+','+a.name
,@sql=@sql+',['+a.name+'] '
+case when b.name in('char','nchar','varchar','nvarchar') then
'text('+cast(case when a.length>255 then 255 else a.length end as varchar)+')'
when b.name in('tynyint','int','bigint','tinyint') then 'int'
when b.name in('smalldatetime','datetime') then 'datetime'
when b.name in('money','smallmoney') then 'money'
else b.name end
FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype
where b.name not in

('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')
and a.id=(select id from tempdb..sysobjects where name=@tbname)
select @sql='create table ['+@sheetname
+']('+substring(@sql,2,8000)+')'
,@fdlist=substring(@fdlist,2,8000)

exec @err=sp_oamethod @obj,'execute',@out out,@sql
if @err<>0 goto lberr

exec @err=sp_oadestroy @obj

--导入数据
set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=YES
;DATABASE='+@path+@fname+''',['+@sheetname+'$])'

exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']')

set @sql='drop table ['+@tbname+']'
exec(@sql)
return

lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
lbexit:
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述
select @sql,@constr,@fdlist
go
  回复
 
# re: SQL语句导入导出大全[收集] 2005-08-07 22:19 任搏软
--ACCESS中操作 SQL Server 数据库,需要你能连接远程的 SQL Server 服务器:
然后打开ACCESS数据库(用ACCESS打开/程序中打开均可)
--导入数据到ACCESS数据库中
--如果是下载SQL的数据(表已经存在的情况)
insert into 表名
SELECT *
FROM [ODBC;Driver=SQL Server;Server=远程SQL服务器名;Uid=用户名;Pwd=密码;database=数据库名].

表名
--如果是下载SQL的数据(表不存在的情况)
SELECT * into 表名
FROM [ODBC;Driver=SQL Server;Server=远程SQL服务器名;Uid=用户名;Pwd=密码;database=数据库名].

表名
--如果是上传数据库到SQL(表已经存在的情况):
insert into [ODBC;Driver=SQL Server;Server=远程SQL服务器名;Uid=用户名;Pwd=密码;database=数据

库名].表名
SELECT * FROM 表名
--如果是上传数据库到SQL(表不存在的情况):
SELECT * into [ODBC;Driver=SQL Server;Server=远程SQL服务器名;Uid=用户名;Pwd=密码;database=数

据库名].表名
FROM 表名
--*/ 
 
 
阅读全文 | 回复(1) | 引用通告 | 编辑
 

    * 上一篇:SQL Server和Oracle的常用函数对比

 
Re:SQL语句导入导出大全[收集]
[ 2007-5-20 17:33:03 | By: me(游客) ]
 
目的
有 时客户出于某种原因会要求我们能将系统的资料导出为excel或则access这种他们熟悉的文件格式。由于ie的打印控制比较困难,我们制作打印的时候 也可以考虑提供excel文件格式的下载,让客户在excel中调整格式后打印。出于这些原因我们可能需要在程序中提供excel文件格式的数据下载。

途径
导出为excel文件有不少方法,例如:
1. 使用 excel automation server循环生成。
2. 生成定界符文件然后使用excel打开,保存为xls文件。
3. 使用xml文件作中间过程文件,然后使用excel的openxml方法打开(需要excel2002以上版本)。
4. 使用ado.net。
我在这里要使用的方法是第四种,利用ado.net来转换。

基本思路
我按照这么几步来实行我的计划:
1. 将sql server中的资料读入dataset。
2. 使用oledb新建一个表(在excel文件中就是一个workbooks)。
3. 通过循环将dataset的内容插入刚才建立的表中。
4. 提供刚才生成的文件的下载。
5. 删除临时生成的excel文件。
这里有个问题,就是临时生成的excel文件的命名冲突问题,我使用guid来生成唯一名称。

范例代码
准备工作,我准备将虚拟目录下的temp作为临时文件目录。

string urlpath = httpcontext.current.request.applicationpath + "/temp/";

string physicpath = httpcontext.current.server.mappath(urlpath);

string filename = guid.newguid() + ".xls";

string connstring = "provider=microsoft.jet.oledb.4.0;data source=" + physicpath + filename +";extended properties=excel 8.0;";

oledbconnection objconn = new oledbconnection(connstring);
oledbcommand objcmd = new oledbcommand();
objcmd.connection = objconn;

建立表结构

objcmd.commandtext = @"create table 客户信息
(
客户名 varchar,
注册时间 varchar
)
";

objcmd.executenonquery();

插入新数据

//建立插入动作的command
objcmd.commandtext = "insert into 客户资料(客户名, 生日) values (@customername, @registertime)";
objcmd.parameters.add(new oledbparameter("@customername", oledbtype.varchar));
objcmd.parameters.add(new oledbparameter("@registertime", oledbtype.varchar));


//遍历dataset将数据插入新建的excel文件中,customerinfo为我们从数据库中读到的数据
foreach (datarow row in customerinfo.tables[0].rows)
{
for (int i=0; i<parm.length; i++)
{
parm[i].value = row[i];
}
objcmd.executenonquery();
}

提供下载

httpresponse response = httpcontext.current.response;
response.clear();
response.writefile(path + filename);
string httpheader="attachment;filename=backup.xls";
response.appendheader("content-disposition", httpheader);
response.flush();

system.io.file.delete(path + filename);//删除临时文件
response.end();


相关文章: