68

我在开发服务器上有一个数据库表,在使用包含 140 万行的 CSV 文件的导入例程将其设置为运行后,该表现在已完全填充。

我在表上运行了数据库发布向导,现在我的本地机器上有一个 286MB 的 SQL 脚本。问题是,我不知道如何运行它。如果我将它加载到 SQL Server Management Studio Express 中,我会收到一个警告窗口,上面写着“操作无法完成”。

关于如何让这个 SQL 脚本运行的任何想法?

4

6 回答 6

171

使用sqlcmd工具执行文件..

sqlcmd -S myServer\instanceName -i C:\myScript.sql

如果您对包含多个 INSERT 的大型 sql 文件(> 100MB)有无法解释的“脚本错误”,只需在文件中将“INSERT INTO”替换为“GO INSERT INTO”,这将减少事务的大小。

于 2008-10-21T16:09:07.057 回答
18

CodePlex 上的这个工具(Big SQL Script File Runner)将运行带有日志和 GUI 的任何大小的脚本文件。

于 2014-06-01T11:59:21.227 回答
8

添加到 Gulzar Nazim 的答案:如果仍然失败,请尝试使用选项指定 SQL 文件的代码页-f

sqlcmd -S myServer\instanceName -d databaseName -i C:\myScript.sql -f 65001

我试图从 SQLite(默认为 UTF-8)导入一个 .dump 文件,并且 sqlcmd 在遇到第一个特殊字符后不断抛出错误。-f 65001为我修好了。

于 2015-04-23T13:12:58.660 回答
1

为什么不直接使用 DTS 导入 CSV 文件呢?

于 2008-10-21T18:02:17.200 回答
0

是的,我们可以这样做,我尝试使用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 

暂停

现在我们开始!!

于 2019-07-16T17:38:52.863 回答
-9

在单个事务中运行这么大的东西不是一个好主意。因此,我建议将文件分成更小、更易于管理的块。

另一种选择是查看直接导入 CSV 数据的其他一些方法。

于 2008-10-21T16:10:28.817 回答