BCP 从多个文本文件导入到多个表
Posted
技术标签:
【中文标题】BCP 从多个文本文件导入到多个表【英文标题】:BCP import from multiple text files to multiple tables 【发布时间】:2015-08-03 13:47:42 【问题描述】:我可以使用 BCP 从 MS SQL 的不同数据库表中成功导出多个文件的数据。但是现在我必须将这些文件导入到另一个具有相同架构和结构的数据库中的相应表中。数据库位于不同的网络中。由于表的数量很大,因此无法手动导入具有相应文件的每个表。 如何做到这一点?
【问题讨论】:
我假设您的目标数据库服务器可以访问存储所有导出数据文件的网络位置,如果是,那么您可以执行Bulk Insert
如下BULK INSERT DestTable FROM '\\NetworkPath_exportedfile_data.dat' WITH (FORMATFILE = '\\NetworkPath_exportedfile_format.Fmt');
你能写一个脚本来为所有的表一一执行吗?最有可能的是 .bat 文件
我使用以下脚本创建命令并从批处理文件中执行这些命令。选择'bcp'--bcp + QUOTENAME(DB_NAME())+'.' --数据库名称 + QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+ '.' -- schema + QUOTENAME(name) -- table + ' out c:\temp\' -- 输出目录 + REPLACE(SCHEMA_NAME(schema_id),' ','') + '.' + REPLACE(name,' ','') -- 文件名 + '.txt -T -c /t,' -- 扩展名,安全 FROM sys.tables
Jigar,你的意思是我必须为每张桌子写脚本吗?另外,它是否支持其他文件类型,如 txt、csv 等
是的,您需要为每个表编写脚本,或者您可以循环。对于 CSV 文件,您可以使用以下内容,BULK INSERT DestTable FROM '\\NetworkPath_exportedfile_data.csv' WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n')
【参考方案1】:
当您获得文件后,您可以使用带有 BCP 命令的单个批处理脚本来加载到目标表:
批处理文件:SampleBatch.bat
bcp.exe DBName.SchemaName.TableName1 IN "YourPathContainingDataFile1" -c -T -S "TargetServerName"
bcp.exe DBName.SchemaName.TableName2 IN "YourPathContainingDataFile2" -c -T -S "TargetServerName"
现在,在命令提示符下调用批处理文件
c:\users\venkat>SampleBatch.bat
【讨论】:
以上是关于BCP 从多个文本文件导入到多个表的主要内容,如果未能解决你的问题,请参考以下文章