+ -
当前位置:首页 → 问答吧 → 怎样把CSV格式的文件导入SQL 2008建立database

怎样把CSV格式的文件导入SQL 2008建立database

时间:2011-11-04

来源:互联网

我现在只会把csv专程xls,然后再用sql导入。。。有人有别的方法嘛。。比如用sql的代码实现。。
因为后面我现在实现自动把csv插入到database里面。

作者: tomyxd1   发布时间: 2011-11-04

BULK INSERT

作者: patrickkong   发布时间: 2011-11-04

直接导入就行了,不用转xls
select * from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=E:\;','select * from roy.csv')

可以当作xls导入

数据量大最好用格式化导入bcp/bulk inser

作者: roy_88   发布时间: 2011-11-04

作者: roy_88   发布时间: 2011-11-04

以下示例使用竖线 (|) 作为字段终止符,使用 |\n 作为行终止符,将订单详细信息从指定的数据文件导入 AdventureWorks.Sales.SalesOrderDetail 表中。
SQL code
BULK INSERT AdventureWorks.Sales.SalesOrderDetail
   FROM 'f:\orders\lineitem.tbl'
   WITH 
      (
         FIELDTERMINATOR =' |',
         ROWTERMINATOR =' |\n'
      )

作者: roy_88   发布时间: 2011-11-04

SQL code
/************************************************************************************************
                          乌龟代码
*************************************************************************************************/

/******* 导出到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=;')...产品 

作者: fredrickhu   发布时间: 2011-11-04

sql访问txt文件的两种方法
select * from openrowset('microsoft.jet.oledb.4.0','text;hdr=yes;database=E:\',a#txt)
select * from opendatasource('microsoft.jet.oledb.4.0','text;hdr=yes;database=E:\')...a#txt

Name ID Xtype UID
sysrowsetcolumns 4 S 4
sysrowsets 5 S 4
sysallocunits 7 S 4
sysfiles1 NULL S 4
syshobtcolumns ; S  
__________________________________________________________________________________________
查询文本文件的内容:

上面的方法,是把所有的内容放在一列里面,如果要分成多个列的话,则需要定义schema.ini文件。schema.ini要和数据文件放在同一个目录下面

schema.ini文件的定义方法:
  [b.txt]
  ColNameHeader=true
  format=tabdelimited
  col1=Name Text WIDTH 10
  col2=ID Text WIDTH 10
  col3=Xtype Text WIDTH 10
  col4=UID Text WIDTH 10
  第一行:如果文本文件的数据有列名,并且作为查询结果的列名的话,则ColNameHeader应该为true,否则定义为false,但是如果后面定义了列名的话,则不使用文本文件中数据的列名,而使用后面定义的列名。但是如果数据有列名的,最好定义为true,否则的话,数据的列名将作为表中的数据。
  第二行:format定义数据的分隔符。一般使用的分隔符有空格,制表符,逗号。分别对应的是delimited( )(注意括号里应该有一个空格),tabdelimited,csvdelimited。在选择分隔符的时候,建议使用tab,因为这样的话数据看起来比较整齐,但是不能为了保证数据的严格整齐,而在数据当中使用多个tab,这样的话读取的数据就会出现错误。其他的逗号和空格同样。
  第三行到最后:制定列名。在这里需要制定每一列的列名,数据类型。数据类型包括:
  microsoft jet数据类型:bit,byte,short,long,currency,single,double,datetime,text,momo。
  ODBC数据类型:char,float,int,longchar,date.
  后面还应该有:指定字符集:使用ansi或者oem
  特别数据类型转换。后面两个如果没有特殊情况的话,可以不写,才用默认的即可。

作者: HEROWANG   发布时间: 2011-11-04

我之前用了这个
SELECT * INTO 表 FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:\test.csv',sheet1$)
但是报错,是不是因为'MICROSOFT.JET.OLEDB.4.0'这个的问题,2010或者03-07版的应该用什么?

作者: tomyxd1   发布时间: 2011-11-04