批量执行SQL文件

原文:批量执行SQL文件

摘要:很多时候我们在做系统升级时需要将大量的.sql文件挨个执行,十分不方便。而且考虑到执行顺序和客服的操作方便性,能不能找到一种简单的方法来批量执行这些sql文件呢?

主要内容:

  1. 准备工作
  2. 利用osql/ocmd命令批量执行sql文件
  3. 使用master..xp_cmdshell存储过程调用osql/ocmd命令
  4. 总结

一、准备工作

既然是要批量执行sql文件,首先我们建立两个sql文件:1.sql和2.sql。

1.sql的内容:

 


INSERT INTO dbo.Products ( ProductName ) VALUES ( '1.sql_'+CAST(GETDATE() AS NVARCHAR(10)) )

2.sql中的内容:

 


INSERT INTO dbo.Products ( ProductName ) VALUES ( '2.sql_'+CAST(GETDATE() AS NVARCHAR(10)) )

二、利用osql/ocmd批处理批量执行sql文件

我们如果需要在命令行执行sql,就需要用到osql命令,当然这个是sql server附带的工具,其具体用法如下图:

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

有了osql/ocmd命令要批量执行sql文件当然需要写一个批处理命令,例如我们执行上面sql文件就可以在txt中编写下面的语句:

 


osql -S"127.0.0.1" -U"sa" -P"sa" -d"Northwind" -i"%CD%\1.sql"
osql -S"127.0.0.1" -U"sa" -P"sa" -d"Northwind" -i"%CD%\2.sql"

然后保存成sql.bat同上面的1.sql和2.sql放到同一个文件下,在执行时双击sql.bat就可以了。

下图是运行前后的结果:

三、使用master..xp_cmdshell存储过程调用osql/ocmd命令

我们上面是使用批处理来进行sql文件的批量执行,那么我们在程序中如何来做呢,当然可以调用批处理文件了,但是我们更多时候还是喜欢使用sql来完成,此时就不得不提到master..xp_cmdshell这个存储过程。master..xp_cmdshell这个存储过程可以让我们以sql语句的方式调用command shell,那么当然我们在cmd中能做的基本上使用master..xp_cmdshell也都能做。

在使用master..xp_cmdshell之前我们必须要对服务器进行安全配置,如果我们不进行配置sql server就会抛出如下错误:

SQL Server 阻止了对组件'xp_cmdshell' 的过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure 启用'xp_cmdshell'。有关启用'xp_cmdshell' 的详细信息,请参阅SQL Server 联机丛书中的"外围应用配置器"。

配置的方式有多种,这里我们就通过sql来进行安全配置(注意为了安全起见在调用完master..xp_cmdshell之后记得关闭),下面是我们修改安全配置和使用master..xp_cmdshell执行osql/ocmd命令的sql语句:

 


--打开配置
EXEC sys.sp_configure 'show advanced options',1
GO
--进行安装
RECONFIGURE
GO
--配置xp_cmdshell为可用
EXEC sys.sp_configure 'xp_cmdshell',1
GO
--进行安装
RECONFIGURE
GO
--执行xp_cmdshell命令
EXEC master..xp_cmdshell 'osql -U sa -P sa -d Northwind -i F:\CSharp\TimingJobs\1.sql'
EXEC master..xp_cmdshell 'osql -U sa -P sa -d Northwind -i F:\CSharp\TimingJobs\2.sql'
GO

--打开配置
EXEC sys.sp_configure 'show advanced options',1
GO
--进行安装
RECONFIGURE
GO
--配置xp_cmdshell为不可用
EXEC sys.sp_configure 'xp_cmdshell',0
GO
--进行安装
RECONFIGURE
GO

四、总结

今天我们主要说了一下如何利用osql/ocmd在命令行及sql中(利用master..xp_cmdshell)批量执行sql文件,其实osql/ocmd用处远远不止这些,感兴趣的朋友可以自己研究一下。


本作品采用知识共享署名 2.5 中国大陆许可协议进行许可,欢迎转载,演绎或用于商业目的。但转载请注明来自崔江涛(KenshinCui),并包含相关链接。

时间: 2024-08-02 08:26:15

批量执行SQL文件的相关文章

sqlserver中通过osql/ocmd批处理批量执行sql文件的方法_MsSql

利用osql/ocmd批处理批量执行sql文件 注意:在上图中我们可以看到osql 并不支持 SQL Server 2008的所有功能,如果需要使用SQL Server 2008的所有功能可以使用ocmd命令. 有了osql/ocmd命令要批量执行sql文件当然需要写一个批处理命令,例如我们执行上面sql文件就可以在txt中编写下面的语句: 复制代码 代码如下: osql -S"127.0.0.1" -U"sa" -P"sa" -d"N

mysql批量执行sql文件的方法_Mysql

1.待执行的sql文件为1.sql.2.sql.3.sql.4.sql等 2.写一个batch.sql文件: source 1.sql; source 2.sql; source 3.sql; source 4.sql; 3.在mysql下执行source /batch文件所在目录/batch.sql; 以上就是小编为大家带来的mysql批量执行sql文件的方法全部内容了,希望大家多多支持~ 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右上

sqlserver中通过osql/ocmd批处理批量执行sql文件的方法

利用osql/ocmd批处理批量执行sql文件 注意:在上图中我们可以看到osql 并不支持 SQL Server 2008的所有功能,如果需要使用SQL Server 2008的所有功能可以使用ocmd命令. 有了osql/ocmd命令要批量执行sql文件当然需要写一个批处理命令,例如我们执行上面sql文件就可以在txt中编写下面的语句:复制代码 代码如下: osql -S"127.0.0.1" -U"sa" -P"sa" -d"No

java-操作数据库的.exe程序,可以批量执行sql脚本文件

问题描述 操作数据库的.exe程序,可以批量执行sql脚本文件 求大神帮忙啊~用java可以做这个东西吗?完全没有思路啊,要求是可以操作局域网内的另一台电脑上的mysql数据库 解决方案 如果有访问权限的话,直接运行Runtime.getRuntime().exec("远程IP文件路径exe文件");如果没有,那可以先用java进行telnet连接到那台机器,然后调用exe程序,再不行就只能在远程机器上写webservice服务然后调用了. 解决方案二: 批量执行SQL脚本 解决方案三

sql server自动生成批量执行SQL脚本的批处理

  场景: DBA那边给我导出了所有的存储.函数等等对象的创建脚本,有上千个文件. 现在需要将这些对象创建脚本导入到另外一个库,如何解决呢? 手动一个个执行显然不太现实. 于是手动写了一个批处理,将所有的文件形成一个.SQL的脚本,最后以@生成的.SQL脚本方式导入到目标库中. OS环境:WINDOWS xp 脚本内容如下: @echo off if exist list.sql del list.sql /q :input cls set input=: set /p input= 请输入要进

如何批量导入sql文件到mysql

问题描述 如何批量导入sql文件到mysql 因为要恢复网站备份的数据,结果发现有很多sql文件,一个一个导入太麻烦了,phpmyadmin,navicate for mysql, mysql 的 source 命令一次就只能导入一个sql文件,网上有说建一个sql文件,在里面把要导入的sql文件名写进去再用source 命令导入,经测试没用的:有没有有其他方法 解决方案 将你的SQL脚本上传到服务器中,咋服务器中使用命令行方式执行,可以批量执行 解决方案二: 1.自己写一断PHP程序循环导入

C#代码连接sqlserver服务器并执行sql文件

问题描述 C#代码连接sqlserver服务器并执行sql文件最好附上完整代码 解决方案 解决方案二:StreamReader读取sql文件内容,直接用就是了,sqlserver支持批量sql解决方案三:这个用BAT就可以了不要用C解决方案四:#该回复于2012-04-11 12:43:30被版主删除

如何利用PHP执行.SQL文件

本篇文章是对使用PHP执行.SQL文件的实现代码进行了详细的分析介绍,需要的朋友参考下   demo.php: 复制代码 代码如下: <?php /** * 读取 sql 文件并写入数据库 * @version 1.01 demo.php */ class DBManager {     var $dbHost = '';     var $dbUser = '';     var $dbPassword = '';     var $dbSchema = '';     function __

sqlserver-求助!!我刚才通过SQLServer2008执行.sql文件后,发现我的其他数据库被修改了!

问题描述 求助!!我刚才通过SQLServer2008执行.sql文件后,发现我的其他数据库被修改了! 我刚才通过SQLServer2008执行.sql文件后,发现我的其他数据库被修改了一部分表和字段.我该如何找到原来的数据库啊??我还能找到吗?? 解决方案 如果你做了备份,可以还原. 解决方案二: 如果备份了,你右击你的数据库在任务里你就看到了