如何执行超过100M的SQL脚本?

转载自品略图书馆  http://www.pinlue.com/article/2020/08/1211/1111126391316.html

 

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

  • 用记事本打开脚本文件,把文件依次剪切成10-15M左右的文本文件,然后再一个个执行;
  • 或者在脚本导出时,分表导出,这样导出的文本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执行一个大脚本文件

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

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

  • 打开命令提示符,键入与下面类似的一个命令,然后按 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文件中,需要的时候替换一些参数,点击文件执行即可!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个示例的Windows数据库备份脚本,它使用了Windows命令行工具来实现备份和删除功能: ```batch @echo off set "db_user=username" set "db_password=password" set "db_name=database_name" set "backup_dir=C:\backup" set "current_date=%date:~0,4%%date:~5,2%%date:~8,2%" set "delete_date=%date:~0,4%%date:~5,2%%date:~8,2%" rem 备份数据库 mysqldump -u %db_user% -p%db_password% %db_name% > %backup_dir%\%db_name%_%current_date%.sql rem 删除超过三天的备份文件 forfiles /p %backup_dir% /m *.sql /c "cmd /c if @isdir==FALSE if @fdate LSS %delete_date% del @path" echo Backup completed. ``` 请注意,此脚本假设您已经安装了MySQL,并且将其加入了系统环境变量中。您需要将`username`、`password`、`database_name`和`C:\backup`分别替换为您的MySQL用户名、密码、数据库名称和备份目录的实际值。 此脚本首先设置了一些变量,包括数据库凭据和备份目录。然后,它使用`mysqldump`命令将数据库备份到指定的目录中,并使用当前日期作为备份文件的一部分。 接下来,使用`forfiles`命令循环遍历备份目录中的所有以`.sql`结尾的文件。对于每个文件,它检查文件的修改日期是否早于当前日期三天之前,如果是,则使用`del`命令删除该文件。 最后,脚本输出完成信息。 请注意,此脚本仅提供了一个示例,并且可能需要根据您的具体需求进行修改。在运行脚本之前,请确保您已经备份了重要的数据,并且对脚本中的命令和参数进行了适当的验证和测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值