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

时间:2009-01-10 22:53:25

标签: sql sql-server import

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

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

10 个答案:

答案 0 :(得分:398)

在命令提示符下,启动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 :(得分:55)

我有完全相同的问题,并且一直在努力,然后终于找到了将-a参数设置为sqlcmd的解决方案,以便更改其默认数据包大小:

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

答案 2 :(得分:12)

  1. 以管理员权限获取命令提示符
  2. 将目录更改为.sql文件存储的位置
  3. 执行以下命令

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

答案 3 :(得分:5)

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

答案 4 :(得分:2)

答案 5 :(得分:1)

您的问题与this one

非常相似

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

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

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

来获取命令行

答案 6 :(得分:1)

  

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

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

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

答案 7 :(得分:1)

希望这对您有所帮助!

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

答案 8 :(得分:0)

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

帮助我的是,每50k个 INSERT s之后,我会发出 GO 命令。

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

答案 9 :(得分:0)

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

谢谢和最好的问候,