1. 使用 sqlserver 账户进行查询
D:\>SQLCMD -Usa -Pmypass -Q "SELECT * FROM AdventutrWorks2008.Production.Location"
注意:
- -U 用于指定登录账号
- -P 用于指定 -U 对应账号的密码
- -Q 用于指定查询语句
2. 使用 windows 账户进行查询
D:\>SQLCMD -E -Q "SELECT * FROM AdventutrWorks2008.Production.Location"
注意:
- -E 指定使用 windows 账户进行身份验证。-E 不能与 -U 或者 -P 选项一起使用
3. 读取文件中的 SQL 语句进行查询
首先,在 cmd 中使用 copy 命令创建一个空的文本文件
D:\>copy con testsql.sql
这样讲转入一个空行。在 cmd 中输入下列代码:
D:\>select * from AdventureWorks2008.Production.Location
然后按 F6 键和回车键(结束文本文件的创建)。这时可以得到这样一条消息:
已复制一个文件。
这时使用 -i 命令执行文件中的 sql。
D:\>SQLCMD -Usa -Pmypass -i testsql.sql
所得到的结果与使用 -Q 运行查询时所得到的一样。
注意:
- -i 用于指定查询 sql 来源的文件
4. 将 sql 查询结果写入 文件中
D:\>SQLCMD -Usa -Pmypass -i testsql.sql -o data.txt
这样查询到的结果不再显示在屏幕上,而是直接写入文件中。
注意:
- -i 用于指定查询结果写入的文件
5. 执行文件夹下的所有 sql
新建 bat 文件,并输入如下代码:
@ECHO OFF
SET SQLCMD="C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.EXE"
SET PATH="C:\Users\Nash\Desktop\others\test\"
SET SERVER="Nash"
SET DB="Test2"
SET LOGIN="sa"
SET PASSWORD="password"
SET OUTPUT="D:\OutputLog.txt"
ECHO %date% %time% > %OUTPUT%
for /r %PATH% %%i in (*.sql) do (
%SQLCMD% -S %SERVER% -d %DB% -U %LOGIN% -P %PASSWORD% -i %%i >> %OUTPUT%
)
双击执行 bat 文件,这个目录下的 sql 就执行完了,相关信息写入 OutputLog.txt
注意:-S 用于指定要连接的 SQL Server 实例,可以在 SQL Server 中打开一个查询窗口,使用 select @@SERVERNAME 获取。如果 SQLServer 服务器的主机名发生了改变,可能导致无法找到该 SQL Server 实例(此时,@@servername 获取到的还是旧的服务名,serverproperty(‘servername’) 获取到的改变后的服务名,两者不一致)。
这时可以执行下面的 SQL, 执行完成之后重启 SQL Server 服务,就可以了。
if serverproperty('servername') <> @@servername
begin
declare @server sysname
set @server = @@servername
exec sp_dropserver @server = @server
set @server = cast(serverproperty('servername') as sysname)
exec sp_addserver @server = @server , @local = 'LOCAL'
end
本文参考:
- BAT遍历所有文件夹及其子文件夹 http://blog.51cto.com/laokaddk/655409
- SQLCMD备忘录:执行文件夹所有Sql文件 http://www.cnblogs.com/lixiaobin/p/SqlCmdRun.html