首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >osql与Invoke-Sqlcmd--重定向后者的输出

osql与Invoke-Sqlcmd--重定向后者的输出
EN

Stack Overflow用户
提问于 2012-08-30 01:46:40
回答 3查看 3.6K关注 0票数 1

我们从调用osql的批处理文件转移到使用Invoke-Sqlcmd cmdlet的Powershell脚本。

有人知道在后一种情况下将输出重定向到使用osql中的-o标志的等效步骤是什么吗?我们有一些后处理步骤,用于查看osql输出文件并采取相应的操作(如果这些日志大于X字节,则报告错误)。如果Invoke-Sqlcmd能够在给定相同的SQL命令的情况下复制相同的输出信息,我会非常高兴。

现在,在我的脚本中,我计划调用Invoke-Sqlcmd <...> | Out-file -filepath myLog.log。有没有人知道这是不是可以或者说得通?

EN

回答 3

Stack Overflow用户

发布于 2012-08-30 01:52:07

来自cmdlet本身的文档:

代码语言:javascript
运行
复制
Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -filePath "C:\MyFolder\TestSQLCmd.rpt"

上面的示例调用Invoke-Sqlcmd,指定一个输入文件并将输出通过管道传输到一个文件。这类似于使用-i和-o选项指定sqlcmd。

http://technet.microsoft.com/en-us/library/cc281720.aspx

票数 1
EN

Stack Overflow用户

发布于 2012-08-30 09:07:21

我想您会发现在invoke-sqlcmd中很难像我一样重现相同的行为。

osql和sqlcmd.exe将把T-SQL PRINT和RAISERROR and error发送到输出文件。

使用Powershell,您可以使用标准错误重定向技术(2>&1)将标准错误重定向到标准输出:

代码语言:javascript
运行
复制
Invoke-Sqlcmd <...>  2>&1 | Out-file -filepath myLog.log

然而,这仍然不能涵盖所有内容。例如,在使用-verbose参数时,RAISERROR和PRINT语句仅在invoke-sqlcmd中输出,如help Invoke-sqlcmd中所述。在Powershell V2中,您不能重定向详细输出。尽管您可以使用Powershell V3使用4>

由于这些原因和其他原因(比如尝试在sqlcmd中重新创建所有许多不同的选项),我在我的环境中重新对计划作业使用sqlcmd.exe。由于osql.exe已被弃用,我建议改用sqlcmd.exe,它支持与osql相同的选项。

票数 1
EN

Stack Overflow用户

发布于 2012-09-04 09:44:49

您仍然可以从PowerShell调用osql。我会继续这样做。Invoke-SqlCmd返回表示结果集中每一行的对象。如果您不打算对这些对象做任何事情,那么就没有理由升级到Invoke-SqlCmd

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12183626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档