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

请教如何通过代码将.bcp数据文件导入到sql的表中
每天都会有两张c_20120705.bcp和s_20120705.bcp的文件需要导入到sql的数据库中,并且以同样的名字生成表。

我采用的办法是利用sql提供的导入和导出数据的工具,具体步骤是:
1、数据源选择:文本文件,文件名选择c_20120705.bcp。点下一步
2、其他都不变化,就是行分隔符选{LF},点下一步
3、制定列分隔符为:制表符。点下一步
4、其他默认一直点下去就ok了
 
由于每天都要做这样的操作,所以希望能用代码自动实现,请指教。


------解决方案--------------------
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

------解决方案--------------------
1,你的文件是否都存在于一个特定的目录里。
使用管理员权限可以使用xp_cmdshell扩展过程。
xp_cmdshell 可以执行dos的dir命令,得到该目录下的文件。

然后再循环得到的文件,
动态拼接语句,动态执行BCP 或 BULK INSERT语句。