----cmd直接执行sql语句
osql -S{0} -U{1} -P{2} -Q"SELECT @@VERSION"
----cmd调用sql文件,并出力结果
osql -S{0} -U{1} -P{2} -i ./a.sql -o ./wxs.txt
----cmd调用sql文件带参数如何处理???
使用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