如何导入大的MS SQL .sql文件?


240

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

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

Answers:


440

在命令提示符下,启动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] 

1
我有一些插入内容,例如:INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text')。我的报价有误。因此,我必须使用(哪个参数)来处理此错误?谢谢
Oleksandr Fentsyk

1
我们可以将脚本保留在外部驱动器上吗?像E:开车吗?而不是C盘?
2013年

10
只是确认我使用此命令运行了一个1GB的sql文件
Loupax 2014年

11
这为我工作,但我必须得到在年底摆脱-o的
bunggo

2
它无法运行75G sql文件。
阿拉丁

62

我遇到了完全相同的问题,经过一段时间的努力,终于找到了将-a参数设置为的解决方案,sqlcmd以更改其默认数据包大小:

sqlcmd -S [servername] -d [databasename] -i [scriptfilename] -a 32767

4
+1用于在示例中添加-d选项。我在SQL文件中使用了“ USE [DBNAME]”。这也很好。不知道哪种方法更好还是更好
-Shaakir

3
谢谢。我使用以下命令作为连接到数据库所需的用户名和密码。 sqlcmd -S <Servername> -U <Username> -P <password> -d <Databasename> -i <filename>

1
您通过设置数据包大小解决了哪个问题?微软表示:“一个更大的数据包大小可以提高性能。”(docs.microsoft.com/en-us/sql/tools/sqlcmd-utility
令人难以置信的一月

20

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

BigSqlRunner


我认为它也很有用,直到我用一个400 MB的SQL文件(充满INSERT语句)运行它。运行9个小时后,没有向数据库添加任何内容,但是BigSqlRunner消耗了3 GB到6 GB的内存。
马丁

很有用。通常,我将文件(各种工具)手动拆分为多个块,然后手动对其进行编辑,以使sql语句“完整”,然后通过批处理脚本执行。这很容易。2.3gb .sql文件,简单。
巴里

14
  1. 以管理员权限执行命令提示符

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

  3. 执行以下命令

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


7

我正在使用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();
    }
}


2

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

帮助我的是,每隔50k INSERT插入一次GO命令。

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


1

您的问题与类似

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

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

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


3
杰克提到他无法通过SSMS进行此操作,因为文件太大。
2009年

1

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

然后,如果两台服务器位于同一网络上,则仅使用DTS(或SSIS,如果是SQL Server 2005+)则更容易。

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


如果一个或两个表生成的文件很大,则可以安全地假定该数据库是几个Gig,这在许多情况下都不可行进行备份和还原。
肯帕奇船长

1

希望对您有所帮助!

sqlcmd -u UserName -s <ServerName\InstanceName> -i U:\<Path>\script.sql

1
-U <用户名> -P <密码>选项命令应为大写而不是小写
eric xu

0

我遇到了同样的问题,花了整整一天的时间寻找出路,但是可以通过制作.sql文件的副本并将扩展名更改为.txt文件,然后将.txt文件打开到chrome浏览器中来解决。我已经看到魔术和文件在浏览器中打开。

谢谢和最好的问候,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.