这是命令行:
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。
答案 0 :(得分:3)
我意识到这是一个很老的帖子,很有可能没有人会看到我的答案,但我会提供我们在我的组织所做的事情。我会第一个承认它有点像kludge,但它对我们来说效果很好。
我们有通过SQLCMD调用的进程,他们使用Raiserror来指示进度条目。很明显,我们很久以前升级到Sql 2012时已经不再有用了。
我在我的C驱动器上创建了一个名为c:\ Sql2008_SQLCMD的新目录,并将以下两个文件从Sql Server binn文件夹的Sql 2008安装复制到该文件夹。
然后我修改了我的进程(在bat文件中)以使用像这样的dos变量
$('#element').Off().click()
{
//write something here
}
然后我用
替换了我的bat文件中的任何普通SQLCMD命令行%SQLCMD%-S blah ...
而不是正常的
SQLCMD -S blah
这种技术允许我调用SQL 2008版本的SQLCMD,只需对我的bat文件脚本进行最少的更改。
这让我继续看到Raiserror的输出,这样我就可以看到我的进程的进展。
我目前仍在Sql 2016 CU3下使用这种技术 - 我不确定当我们最终进入Sql 2017或beyound时我是否会遇到任何问题