【发布时间】: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')
标签: sql-server bcp