我使用RedGate SQL数据比较并生成.sql文件,因此我可以在本地计算机上运行它。但问题是该文件超过300mb,这意味着我无法复制和粘贴,因为剪贴板将无法处理它,当我尝试在SQL Server Management Studio中打开该文件时,我收到错误关于文件太大。
有没有办法运行大型.sql文件?该文件基本上包含两个新表的数据。
答案 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)
执行以下命令
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浏览器中来解决。我已经看到魔术了,并在浏览器中打开了文件。
谢谢和最好的问候,