如何使用sqlcmd运行sql脚本文件并输出到shell和文件

时间:2012-02-06 18:37:58

标签: logging sqlcmd

我正在尝试使用sqlcmd从文件运行sql脚本,使用以下命令:

sqlcmd -S <server> -d <database> -i <input file> -o <output file> 
      -U <user> -P <password>

我运行我的sql文件并输出到日志文件。

问题是这会将sqlcmd的输出更改为文件..我想将输出也输出到shell。

3 个答案:

答案 0 :(得分:9)

@Noam,

UNIX世界中的标准程序从 stdin 读取并将 stdout 写入指定文件:{ {3}}命令。以下示例列出 stdout 和&#34; myfile&#34;的当前目录:

$ ls | tee "myfile"

Windows有一些开源端口,比如tee,它们甚至可以实现自己的实现(参见wintee),但PowerShell实际上已经构建了这个实用程序-in:here。以下示例与之前的示例类似,在PowerShell中:

PS [c:\tmp]
> dir | tee myDirContents.txt

因此,以下命令将使用当前的Windows凭据将 myscript.sql 执行到 myserver,,其结果将输出到控制台 to&#34; result.txt&#34;:

PS [c:\tmp]
> sqlcmd -i mysrcipt.sql -S myserver -E | tee "result.txt"

答案 1 :(得分:3)

@Noam,虽然我找不到复制STDOUT处理程序的方法,但是可能解决您问题的一个解决方案是将sql脚本执行到输出文件(即result.txt)然后使用{{ 1}}将其打印到STDOUT中。

type result.txt

如果你真的需要复制处理程序(可能命令需要花费很多时间而且你不想等到它在完成第一行之前完成),你可以制作一个简单的程序来将输入从STDIN复制到STDOUT也是一个文件。然后你可以将命令重写为:

c:>sqlcmd -i mysrcipt.sql -o result.txt -S myserver -E
c:>type result.txt

答案 2 :(得分:0)

此代码可用于需要身份验证的连接

sqlcmd -S "server_name" -d "database_name" -i "input_file" -o "output_file" -U "user_name" -P "password"