我使用RedGate SQL数据比较并生成了一个. SQL文件,这样我就可以在我的本地机器上运行它。但问题是文件超过300mb,这意味着我不能做复制和粘贴,因为剪贴板将无法处理它,当我尝试在SQL Server Management Studio中打开文件时,我得到一个关于文件太大的错误。
有没有办法运行一个大的。sql文件?该文件主要包含两个新表的数据。
用osql在命令行运行它,看这里:
http://metrix.fcny.org/wiki/display/dev/How+to+execute+a+.SQL+script+using+OSQL
在命令提示符中,启动sqlcmd:
sqlcmd
sqlcmd -S <server> -i C:\<your file here>.sql
只需将<server>替换为SQL框的位置,将<your file here>替换为脚本的名称。不要忘记,如果你正在使用SQL实例,语法是:
<server>
<your file here>
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]
你的问题和这一个很相似
您可以将文件/脚本保存为.txt或. Sql,并从Sql Server Management Studio中运行它(我认为菜单是打开/查询,然后在SSMS界面中运行查询)。您可能必须更新第一行,指示要在本地机器上创建或选择的数据库。
如果必须经常进行这种数据传输,那么可以进行复制。根据您的需要,快照复制也可以。如果必须在两台服务器之间同步数据,则可以采用更复杂的模型,如合并复制。
编辑:我没有注意到你与SSMS链接到文件大小的问题。然后,您可以像其他人建议的那样使用命令行,快照复制(在您的主服务器上发布,在您的本地服务器上订阅,复制,然后取消订阅),甚至备份/恢复
该文件主要包含两个新表的数据。
然后,您可能会发现,如果两台服务器在同一网络上,那么仅通过DTS(或SSIS,如果这是SQL Server 2005+)传输数据会更简单。
如果两台服务器不在同一网络上,则可以备份源数据库并将其恢复到目标服务器上的新数据库。然后,您可以使用DTS/SSIS,甚至简单的INSERT INTO SELECT,将这两个表传输到目标数据库。
INSERT INTO SELECT
我有完全相同的问题,一直在斗争一段时间,然后终于找到了解决方案,即将-a参数设置为sqlcmd,以改变其默认数据包大小:
-a
sqlcmd -S [servername] -d [databasename] -i [scriptfilename] -a 32767
您也可以使用这个工具。它真的很有用。
BigSqlRunner
注意:断链接,所以已经更新了它。
以管理员权限进入命令提示符
更改。sql文件所在目录
执行以下命令
sqlcmd -S 'your server name' -U 'user name of server' -P 'password of server' -d 'db name'-i script.sql
我使用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(); } }
希望这对你有帮助!
sqlcmd -u UserName -s <ServerName\InstanceName> -i U:\<Path>\script.sql
我也有类似的问题。我的sql脚本文件大小超过150MB(几乎900k非常简单的__abc0)。我使用了Takuro建议的解决方案(作为这个问题的答案),但我仍然得到错误消息,说没有足够的内存(“内部”资源池中没有足够的系统内存来运行此查询”)。
帮助我的是,我把去命令放在每50k __abc1之后。
(它不是直接解决问题(文件大小),但我相信它解决了与sql脚本本身的大容量间接相关的问题。在我的情况下,许多插入命令)
= =比;sqlcmd -S [servername] -d [databasename] -i [scriptfilename] -a 32767
我已经成功地完成了这个命令与365mb的sql文件。 该语法大约在15分钟内运行。 它帮我解决了一个花了我很长时间才弄明白的问题
运行脚本文件
打开命令提示窗口。
在命令提示符窗口中,键入:sqlcmd -S <ServerName\InstanceName> -i C:\yourScript.sql
sqlcmd -S <ServerName\InstanceName> -i C:\yourScript.sql
按回车。
对于所有仍然遇到导入大型SQL转储问题的人来说,可能还有另一种方法。
在可能的情况下还需要考虑什么:如果您可以访问服务器,您可以将数据库分成多个部分导出,比如首先导出结构,然后按表(或相关对象)导出更小的数据块,而不是一个大文件。
当您无法访问服务器和/或需要使用现有的大文件时,您可以尝试使用SQLDumpSplitter: https://philiplb.de/sqldumpsplitter3/将它们拆分为多个部分。
然后导入这些片段以获得数据库的完整副本。
祝你们好运。