如何使用nowlcit与sqlcmd一起使用raiserror?

时间:2016-06-29 18:30:13

标签: sql-server sql-server-2012 sqlcmd

这是命令行:

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。

1 个答案:

答案 0 :(得分:3)

我意识到这是一个很老的帖子,很有可能没有人会看到我的答案,但我会提供我们在我的组织所做的事情。我会第一个承认它有点像kludge,但它对我们来说效果很好。

我们有通过SQLCMD调用的进程,他们使用Raiserror来指示进度条目。很明显,我们很久以前升级到Sql 2012时已经不再有用了。

我在我的C驱动器上创建了一个名为c:\ Sql2008_SQLCMD的新目录,并将以下两个文件从Sql Server binn文件夹的Sql 2008安装复制到该文件夹​​。

  • SQLCMD.EXE
  • SQLCMD.rll

然后我修改了我的进程(在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时我是否会遇到任何问题