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