最近遇到一个问题,在sqlserver的查询分析器里面执行一个超过100MB的数据库脚本,发现老是报“引发类型为“System.OutOfMemoryException”的异常”,上网查了一下,主要是因为.sql的脚本文件过大(一般都超过100M)造成内存无法处理这么多的数据。

解决办法有各种各样,例如:

1、用记事本打开脚本文件,把文件依次剪切成10-15M左右的文本文件,然后再一个个执行;

2、或者在脚本导出时,分表导出,这样导出的文本size也不会很大;

以上问题虽然简便,但是步骤繁多,要是表和数据太多,着实是一种劳力折磨!另外如果表之间是有主外键关系的,分数据得小心谨慎,否则报错让你抓狂!

好!说了这么多,到底有什么解决方案了呢!

解决方案就是使用cmd下的osql命令,脚本大不是问题,关键是你得有耐心,执行大脚本,是需要一定的时间的!实际上也是!

什么是 Osql?

osql 是一个 Microsoft Windows 32 命令提示符工具,您可以使用它运行 Transact-SQL 语句和脚本文件!

如何使用 Osql?

在开始->运行 中键入cmd,使用 "OSQL -?"命令,就可以显示osql命令行的帮助。
注意:osql 工具的选项列表是区分大小的,在使用时注意。

注意:在上图中我们可以看到osql 并不支持 SQL Server 2012的所有功能,如果需要使用SQL Server 2012的所有功能可以使用ocmd命令。

1、使用osql执行单个 Transact-SQL 语句

在键入cmd与下面这一个类似的命令:

osql -E -q "Transact-SQL statement"

例如:sql -E -q "use myDB select * from myTable"

其中 -E 表示使用 Microsoft Windows NT 身份验证。

也可以使用sa账户,具体可以看看上面的命令!

而-q 表示运行 Transact-SQL 语句,但是在查询结束时不退出 osql。

如要运行 Transact-SQL 语句并退出 osql,请使用 -Q 参数来代替 -q。

2、使用osql执行一个大脚本文件

将该工具指向一个脚本文件,步骤:

a.创建一个包含一批 Transact-SQL 语句的脚本文件(如 myfile.sql)。

b.打开命令提示符,键入与下面类似的一个命令,然后按 ENTER 键:

osql -E -i input_file

其中input_file 是脚本文件及其完整路径。例如,如果脚本文件 myfile.sql 在 C:\users文件夹中,

请将参数 myfile 替换为 C:\users\myfile.sql。

该脚本文件的运行结果将出现在控制台窗口中。

如果您想将运行结果定向到一个文件,请向上述命令中添加 -o output_file 参数。例如:

osql -E -i input_file -o output_file

其中output_file 是输出文件及其完整路径。

总结

如果你觉得太麻烦了,可以使用批处理,将常用的一些命令写在bat文件中,需要的时候替换一些参数,点击文件执行即可!是不是比自己去写一个程序方便多呢???

如何执行超过一百兆(100MB)的sql脚本?的更多相关文章

  1. 执行超过1个小时的SQL语句

    SELECT MO.MO_ID, MO.ITEM, MO.QTYORDERED, MO.PLANNEDSTARTDATE, BR.MAXLOTSIZE FROM TEMP_MO MO, (SELECT ...

  2. MySQL命令行SQL脚本的导入导出小结(数据库的备份与还原)

    1.设置环境变量 要想在命令行下各处都能执行mysql命令,必须在系统变量Path中添加mysql的命令所在的目录.例如我安装的是集成PHP环境的mysql,在D盘xampps下,则我需要将" ...

  3. [转]SQL server2008 导入超大SQL脚本文件(超过10M)

    同事给我一个sqlserver的学习库,sql脚本导出有300m,gui执行有内存溢出的错误报出来,所以问了一下度娘,学而时习之:) 1. SQL server2008 导入超大SQL脚本文件(超过1 ...

  4. jdbc在mysql下一次执行多条sql脚本

    默认连接mysql的时候一次只能执行一条sql.要批量执行sql需要在jdbcUrl中增加“allowMultiQueries=true”参数,完整jdbcUrl如下:  jdbc:mysql://l ...

  5. SQL Server自动化运维系列——批量执行SQL脚本(Power Shell)

    需求描述 一般在生产环境中,在投产的情况下,需要批量的来执行SQL脚本文件,来完成整个投产,如果投产文件比较多的情况下,无疑这是一个比较痛苦的过程,所以本篇通过PowerShell脚本来批量完成. 监 ...

  6. MySQL命令行下执行.sql脚本详解

    本文主要介绍一个在MySQL命令行下执行脚本文件的例子,通过这个例子让我们来了解一下在命令行下MySQL是怎样执行脚本的吧.现在我们开始介绍这一过程. 1.首先编写sql脚本,保存为的:book.sq ...

  7. shell中创建mysql库和执行sql脚本

    以前执行oracle脚本都是放到plsql中执行 mysql 脚本执行: (1).先创建一个worlddb库 (2).导入sql脚本: 这就ok啦,哈哈.

  8. 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题   问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件.   首先,Quartz表达式培植的启 ...

  9. sql脚本比较大,sqlserver 无法导入,就用cmd命令执行

    osql简单用法:用来将本地脚本执行,适合sql脚本比较大点的情况,执行起来比较方便 1 osql -S serverIP -U sa -P 123 -i C:\script.sql serverIP ...

随机推荐

  1. 70.app上架被拒(info.plist定位参数配置)

    问题一: Your app declares support for location in the UIBackgroundModes key in your Info.plist file but ...

  2. 747. Largest Number At Least Twice of Others

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  3. 爬取数据时解析url时一直报错Caused by: java.net.URISyntaxException: Illegal character in query at index 823替换了所有空格和特殊字符还是无效

    近日在用HttpClient访问抓取汇率时,为了省力,直接采用 String url = "http://api.liqwei.com/currency/?exchange=usd|cny& ...

  4. win7 C环境搭建

    1   http://jingyan.baidu.com/article/14bd256e4cb86ebb6d261287.html 2   http://jingyan.baidu.com/arti ...

  5. c# 产生随机数 程序所在路径

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. java中定时器总结

    java实现定时器的四种方式: 一. /** * 延迟20000毫秒执行 java.util.Timer.schedule(TimerTask task, long delay) */ public ...

  7. 07-css的继承性和层叠性

    css有两大特性:继承性和层叠性 继承性 面向对象语言都会存在继承的概念,在面向对象语言中,继承的特点:继承了父类的属性和方法.那么我们现在主要研究css,css就是在设置属性的.不会牵扯到方法的层面 ...

  8. MIT Molecular Biology 笔记7 调控RNA

    视频  https://www.bilibili.com/video/av7973580/ 教材 Molecular biology of the gene 7th edition  J.D. Wat ...

  9. Ng第十九课:总结(Conclusion)

    19.1  总结和致谢 欢迎来到<机器学习>课的最后一段视频.我们已经一起学习很长一段时间了.在最后视频中,我想快速地回顾一下这门课的主要内容,然后简单说几句想说的话. 作为这门课的结束时 ...

  10. centos常用命令--备份

    端口打开 命令如下:/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT #8080为指定端口 /etc/rc.d/init.d/iptables ...