2016-06-29 26 views
1

は、コマンドラインである:sqlcmdでnowaitを使用してraiserrorを作成する方法は?ここ

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" 

それが10秒世界直後、その後、出力ハローになっています!。残念ながら、10秒後に両方の文字列を出力します。

sqlcmdは正しく行うことができますか?どうやって?

P.S.

私はLinqPadやGUIを使用したくないです。

+2

[これは既知の問題が」と閉じているbeyound行くとき、私は何の問題があるでしょう場合、私はわからないんだけど修正できません "](https://connect.microsoft.com/SQLServer/feedback/details/765019/raiserror-with-nowait-not-honoured-in-sqlcmd11) –

+0

他のコマンドラインの代替? – mark

+0

@ MartinsSmith - 私は答えが気に入らないほど、答えです。私はあなたに信用できるようにあなたのコメントを整理できますか? – mark

答えて

3

これは古い投稿であり、誰も私の回答を見ることはない可能性が高いと認識していますが、私は自分の組織で行ったことを提供します。私はそれがちょっとしたものだと認める最初の人ですが、それは私たちのためにうまくいっています。

SQLCMDを介して呼び出されるプロセスがあり、進行状況のエントリを示すためにRaiserrorが使用されます。明らかに、それは長い時間前にSql 2012にアップグレードしたときにはもはや機能しませんでした。

Cドライブに新しいディレクトリc:\ Sql2008_SQLCMDを作成し、Sql Server binnフォルダのSql 2008インストールからそのフォルダに次の2つのファイルをコピーしました。

  • SQLCMD.EXE
  • SQLCMD.rll

私はその後、私は、任意の通常の置換この

SET SQLCMD="C:\Sql2008_SQLCMD\sqlcmd" 

のようなドスの変数を使用するように(バットファイルに)私のプロセスを修正私のbatファイル内のSQLCMDコマンドライン

%SQLCMD%-S blah ...

の代わりに、通常の

SQLCMD -Sの

何とか

このテクニックは私が私のバットファイルのスクリプトへの変更を最小限に抑えてSQLCMDのSQL 2008のバージョンを起動することができました。

これにより、私はプロセスの進捗状況を確認できるように、Raiserrorからの出力を引き続き確認することができました。

私は現在、まだSQLの2016 CU3の下で、この技術を使用しています - 私たちは最終的にはSQLの2017または