我在开发服务器上有一个数据库表,现在我已经完全填充了一个数据库表,我使用导入例程运行包含140万行的CSV文件。
我在桌面上运行了数据库发布向导,现在我的本地计算机上有一个286MB的SQL脚本。问题是,我无法弄清楚如何运行它。如果我将其加载到SQL Server Management Studio Express中,我会收到一个警告窗口,显示“操作无法完成”。
关于如何让这个SQL脚本运行的任何想法?
在单个事务中运行大型事务并不是一个好主意。因此,我建议将文件分解为更小,更易于管理的块。
另一种选择是查看直接导入CSV数据的其他一些方法。
使用sqlcmd工具执行文件..
sqlcmd -S myServer\instanceName -i C:\myScript.sql
如果对于包含多个INSERT的大型sql文件(> 100MB)有一个无法解释的“脚本错误”,只需在文件中用“GO INSERT INTO”替换“INSERT INTO”,这将减少事务的大小。
CodePlex上的这个工具(Big SQL Script File Runner)将运行带有日志和GUI的任何大小的脚本文件。
添加到Gulzar Nazim的答案:如果仍然出现故障,请尝试使用选项codepage指定SQL文件的-f
:
sqlcmd -S myServer\instanceName -d databaseName -i C:\myScript.sql -f 65001
我试图从SQLite(默认为UTF-8)导入.dump文件,并且sqlcmd在遇到第一个特殊字符后仍然抛出错误。 -f 65001
为我修好了。
为什么不直接使用DTS导入CSV文件?
是的,我们可以这样做,我尝试使用BCP(批量复制程序)方法以避免OutOfMemory问题。
注意:在SQLServer 2014中尝试过
在BCP中,首先我们需要将Source DataBase数据导出到bcp文件(在本地目录文件夹中),然后需要将该bcp文件导入Source DataBase
以下是蛋糕步行步骤:
注意:
a)确保Destination DataBase中存在空表
b)确保C驱动器中存在Temp文件夹
1)使用以下命令创建名为Export_Data.bat的bat文件
bcp.exe [Source_DataBase_Name].[dbo].[TableName] OUT "C:\Temp\TableName.bcp" -S "Computer Name" -U "SQL Server UserName" -P "SQL Server Password" -n -q
暂停
2)运行该bat文件,因此将在Temp文件夹中生成bcp文件
3)然后使用以下命令创建另一个名为Import_Data.bat的bat文件
bcp.exe [Destination_DataBase_Name].[dbo].[TableName] IN "C:\Temp\TableName.bcp" -S "Computer Name" -U "SQL Server UserName" -P "SQL Server Password" -n -q
暂停
现在我们开始!!