266

我使用 RedGate SQL 数据比较并生成了一个 .sql 文件,所以我可以在本地机器上运行它。但问题是文件超过 300mb,这意味着我无法复制和粘贴,因为剪贴板无法处理它,当我尝试在 SQL Server Management Studio 中打开文件时出现错误关于文件太大。

有没有办法运行一个大的 .sql 文件?该文件基本上包含两个新表的数据。

4

13 回答 13

491

从命令提示符启动sqlcmd

sqlcmd -S <server> -i C:\<your file here>.sql 

只需替换<server>为 SQL 框的位置和<your file here>脚本的名称。不要忘记,如果您使用的是 SQL 实例,则语法是:

sqlcmd -S <server>\instance.

以下是您可以传递 sqlcmd 的所有参数的列表:

Sqlcmd            [-U login id]          [-P password]
  [-S server]            [-H hostname]          [-E trusted connection]
  [-d use database name] [-l login timeout]     [-t query timeout] 
  [-h headers]           [-s colseparator]      [-w screen width]
  [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]
  [-c cmdend]            [-L[c] list servers[clean output]]
  [-q "cmdline query"]   [-Q "cmdline query" and exit] 
  [-m errorlevel]        [-V severitylevel]     [-W remove trailing spaces]
  [-u unicode output]    [-r[0|1] msgs to stderr]
  [-i inputfile]         [-o outputfile]        [-z new password]
  [-f  | i:[,o:]] [-Z new password and exit] 
  [-k[1|2] remove[replace] control characters]
  [-y variable length type display width]
  [-Y fixed length type display width]
  [-p[1] print statistics[colon format]]
  [-R use client regional setting]
  [-b On error batch abort]
  [-v var = "value"...]  [-A dedicated admin connection]
  [-X[1] disable commands, startup script, environment variables [and exit]]
  [-x disable variable substitution]
  [-? show syntax summary] 
于 2009-01-10T22:56:07.610 回答
75

我遇到了完全相同的问题并且已经挣扎了一段时间然后终于找到了将-a参数设置sqlcmd为以更改其默认数据包大小的解决方案:

sqlcmd -S [servername] -d [databasename] -i [scriptfilename] -a 32767
于 2013-03-14T08:40:22.797 回答
20

您也可以使用此工具。它真的很有用。

BigSqlRunner

注意:链接断开,因此已更新。

于 2015-08-25T09:25:31.927 回答
17
  1. 以管理员权限获取命令提示符

  2. 将目录更改为 .sql 文件的存储位置

  3. 执行以下命令

    sqlcmd -S 'your server name' -U 'user name of server' -P 'password of server' -d 'db name'-i script.sql

于 2016-06-03T09:43:14.397 回答
8

我正在使用 MSSQL Express 2014,但没有一个解决方案适合我。他们都只是崩溃了SQL。因为我只需要运行一个包含许多简单插入语句的一次性脚本,所以我通过编写一个小控制台应用程序作为最后的手段来解决它:

class Program
{
    static void Main(string[] args)
    {
        RunScript();
    }

    private static void RunScript()
    {
        My_DataEntities db = new My_DataEntities();

        string line;

        System.IO.StreamReader file =
           new System.IO.StreamReader("c:\\ukpostcodesmssql.sql");
        while ((line = file.ReadLine()) != null)
        {
            db.Database.ExecuteSqlCommand(line);
        }

        file.Close();
    }
}
于 2017-04-06T07:17:42.607 回答
4

使用 osql 在命令行运行它,请参见此处:

http://metrix.fcny.org/wiki/display/dev/How+to+execute+a+.SQL+script+using+OSQL

于 2009-01-10T22:55:55.410 回答
3

希望这对你有帮助!

sqlcmd -u UserName -s <ServerName\InstanceName> -i U:\<Path>\script.sql
于 2017-08-18T16:35:02.567 回答
2

我有类似的问题。我的带有 sql 脚本的文件大小超过 150MB(几乎 900k 的非常简单的INSERT s)。我使用了 Takuro 建议的解决方案(作为这个问题的答案),但我仍然收到错误消息,提示内存不足(“资源池'内部'中的系统内存不足,无法运行此查询”)。

对我有帮助的是,我在每 50k INSERT之后放置了GO命令。

(它不是直接解决问题(文件大小),但我相信它解决了与大尺寸 sql 脚本本身间接相关的问题。在我的情况下,许多插入命令)

于 2019-03-07T22:27:31.193 回答
1

你的问题和这个很相似

您可以将文件/脚本保存为 .txt 或 .sql 并从 Sql Server Management Studio 运行它(我认为菜单是 Open/Query,然后只需在 SSMS 界面中运行查询)。您可能必须更新第一行,指示要在本地计算机上创建或选择的数据库。

如果您必须经常进行此数据传输,则可以进行复制。根据您的需要,快照复制可能没问题。如果您必须在两台服务器之间同步数据,则可以采用更复杂的模型,例如合并复制。

编辑:我没有注意到与文件大小相关的 SSMS 存在问题。然后您可以按照其他人的建议使用命令行,快照复制(在主服务器上发布,在本地服务器上订阅,复制,然后取消订阅)甚至备份/恢复

于 2009-01-10T23:19:39.077 回答
1

该文件基本上包含两个新表的数据。

然后,如果两台服务器位于同一网络上,您可能会发现仅 DTS(或 SSIS,如果这是 SQL Server 2005+)数据更简单。

如果两台服务器不在同一个网络上,您可以备份源数据库并将其还原到目标服务器上的新数据库。然后,您可以使用 DTS/SSIS,甚至是简单的INSERT INTO SELECT,将这两个表传输到目标数据库。

于 2009-01-11T00:18:49.783 回答
1

==> sqlcmd -S [服务器名] -d [数据库名] -i [脚本文件名] -a 32767

我已经用 365mb 的 sql 文件成功完成了这个命令。此语法运行大约 15 分钟。它帮助我解决了一个我花了很长时间才弄清楚的问题

于 2021-10-10T18:26:24.577 回答
1

运行脚本文件

打开命令提示符窗口。

在命令提示符窗口中,键入:sqlcmd -S <ServerName\InstanceName> -i C:\yourScript.sql

按 ENTER。

于 2022-02-15T06:41:59.017 回答
0

对于所有仍然遇到导入非常大的 SQL 转储问题的人来说,可能还有另一种方法。

可能时还应考虑的事项:如果您可以访问服务器,则可以将数据库导出为多个部分,例如首先是结构,然后是每个表(或相关对象)以较小的部分导出数据,而不是一个大文件.

当您无权访问服务器和/或需要使用现有的大文件时,您可以尝试使用 SQLDumpSplitter 将它们拆分为多个部分:https ://philiplb.de/sqldumpsplitter3/ 。

然后导入这些片段以获得数据库的完整副本。

祝大家好运。

于 2022-02-28T14:05:18.420 回答