这是命令行:
sqlcmd -S localhost -U myuser -P mypwd -b -r0 -Q "raiserror('hello',10,1) with nowait;waitfor delay '00:00:10';raiserror('world!',10,1) with nowait"
应该输出hello立即然后 10 秒后world!。不幸的是,它在 10 秒后输出了两个字符串。
sqlcmd 可以做对吗?如何?
P.S.
我不想为此使用 LinqPad 或任何 GUI。
我意识到这是一篇旧帖子,很可能没有人会看到我的答案,但我会提供我们在我的组织中所做的一些事情。我将是第一个承认这有点拼凑的人,但它对我们来说运作良好。
我们有通过 SQLCMD 调用的进程,它们使用 Raiserror 来指示进度条目。显然,当我们很久以前升级到 Sql 2012 时,这不再起作用。
我最终在 C 驱动器上创建了一个名为 c:\Sql2008_SQLCMD 的新目录,并将以下两个文件从 Sql Server binn 文件夹的 Sql 2008 安装复制到该文件夹。
然后我修改了我的进程(在bat文件中)以使用这样的dos变量
SET SQLCMD="C:\Sql2008_SQLCMD\sqlcmd"
然后我将 bat 文件中的任何正常 SQLCMD 命令行替换为
%SQLCMD% -S 废话...
而不是正常的
SQLCMD -S 等等
这种技术允许我调用 SQLCMD 的 SQL 2008 版本,并对我的 bat 文件脚本进行最少的更改。
这使我能够继续查看 Raiserror 的输出,这样我就可以看到进程的进度。
我目前仍在 Sql 2016 CU3 下使用这种技术 - 我不确定当我们最终进入 Sql 2017 或更高版本时是否会遇到任何问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)