我在开发服务器上有一个数据库表,在使用包含 140 万行的 CSV 文件的导入例程将其设置为运行后,该表现在已完全填充。
我在表上运行了数据库发布向导,现在我的本地机器上有一个 286MB 的 SQL 脚本。问题是,我不知道如何运行它。如果我将它加载到 SQL Server Management Studio Express 中,我会收到一个警告窗口,上面写着“操作无法完成”。
关于如何让这个 SQL 脚本运行的任何想法?
我在开发服务器上有一个数据库表,在使用包含 140 万行的 CSV 文件的导入例程将其设置为运行后,该表现在已完全填充。
我在表上运行了数据库发布向导,现在我的本地机器上有一个 286MB 的 SQL 脚本。问题是,我不知道如何运行它。如果我将它加载到 SQL Server Management Studio Express 中,我会收到一个警告窗口,上面写着“操作无法完成”。
关于如何让这个 SQL 脚本运行的任何想法?
使用sqlcmd工具执行文件..
sqlcmd -S myServer\instanceName -i C:\myScript.sql
如果您对包含多个 INSERT 的大型 sql 文件(> 100MB)有无法解释的“脚本错误”,只需在文件中将“INSERT INTO”替换为“GO INSERT INTO”,这将减少事务的大小。
CodePlex 上的这个工具(Big SQL Script File Runner)将运行带有日志和 GUI 的任何大小的脚本文件。
添加到 Gulzar Nazim 的答案:如果仍然失败,请尝试使用选项指定 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 中,首先我们需要将源数据库数据导出到bcp文件(在本地目录文件夹中),然后需要将该bcp文件导入源数据库
以下是蛋糕步行步骤:
笔记:
a) 确保目标数据库中存在空表
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
暂停
现在我们开始!!
在单个事务中运行这么大的东西不是一个好主意。因此,我建议将文件分成更小、更易于管理的块。
另一种选择是查看直接导入 CSV 数据的其他一些方法。