SQL Server - 运行大型脚本文件

问题描述 投票:64回答:5

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

我在桌面上运行了数据库发布向导,现在我的本地计算机上有一个286MB的SQL脚本。问题是,我无法弄清楚如何运行它。如果我将其加载到SQL Server Management Studio Express中,我会收到一个警告窗口,显示“操作无法完成”。

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

sql-server sql-scripts
5个回答
-8
投票

在单个事务中运行大型事务并不是一个好主意。因此,我建议将文件分解为更小,更易于管理的块。

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


167
投票

使用sqlcmd工具执行文件..

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

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


17
投票

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


8
投票

添加到Gulzar Nazim的答案:如果仍然出现故障,请尝试使用选项codepage指定SQL文件的-f

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

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


1
投票

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


0
投票

是的,我们可以这样做,我尝试使用BCP(批量复制程序)方法以避免OutOfMemory问题。

注意:在SQLServer 2014中尝试过

在BCP中,首先我们需要将Source DataBase数据导出到bcp文件(在本地目录文件夹中),然后需要将该bcp文件导入Source DataBase

enter image description here

以下是蛋糕步行步骤:

注意:

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 

暂停

现在我们开始!!

© www.soinside.com 2019 - 2024. All rights reserved.