【问题标题】:SQL Server - Running large script filesSQL Server - 运行大型脚本文件
【发布时间】:2010-09-18 08:34:22
【问题描述】:

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

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

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

【问题讨论】:

标签: sql-server sql-scripts


【解决方案1】:

使用sqlcmd 工具执行文件..

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

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

【讨论】:

  • 使用这种方法我得到错误“Sqlcmd:错误:脚本错误。”这与文件的大小有关吗?
  • 首先检查连接性。也许您必须传递用户名和密码(-U -P 选项)。您也可以尝试使用较小的文件吗?我已经运行了巨大的脚本,没有任何问题。
  • 如果我取出除了 15 个 INSERT 语句之外的所有语句,它就可以工作。如果我将其他 1,410,472 条语句放回原处,则会失败并显示该错误消息。
  • 所有这些语句都在一个事务中吗?也许它正在超时。在运行之前尝试将超时设置为 0(无限)。
  • 这里有一些讨论大文件文本编辑器的活动stackoverflow.com/questions/222853/…
【解决方案2】:

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

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

【讨论】:

  • Gulzar Nazim 的回答是最好的回答。
  • @feryt 这可能是你的意见,但这不是 OP 决定的,你更喜欢别人的答案也不是迈克尔的错(即使其他答案没有解决 OP 的问题)问题)。
【解决方案3】:

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

【讨论】:

  • 首先需要对数据进行一堆处理,我不想在实时服务器上运行。因此,我需要能够将数据处理成一个简单的 SQL 脚本,以尽量减少该框所需的工作。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

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

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

    【讨论】:

      【解决方案6】:

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

      暂停

      我们开始了!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-26
        • 1970-01-01
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多