2016-06-29 17 views
1

Hier ist die Befehlszeile ein:Wie mache ich raiserror mit nowait Arbeit mit 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" 

Es ausgeben soll hallo sofort und dann nach 10 Sekunden Welt!. Leider gibt es beide Zeichenfolgen nach 10 Sekunden aus.

Kann sqlcmd es richtig machen? Wie?

P.S.

Ich möchte nicht LinqPad oder irgendeine GUI für diese Angelegenheit verwenden.

+2

[Dies ist ein bekanntes Problem, geschlossen als " wird nicht repariert "] (https://connect.microsoft.com/SQLServer/feedback/details/765019/raiserror-with-nowait-not-honoured-in-sqlcmd11) –

+0

Eine andere Befehlszeilenalternative? – mark

+0

@MartinSmith - so viel wie ich nicht die Antwort mag, ist es die Antwort. Könnten Sie Ihren Kommentar so arrangieren, dass ich Ihnen einen Kredit geben kann? – mark

Antwort

3

Ich weiß, das ist ein alter Post und es ist sehr wahrscheinlich, dass niemand meine Antwort sehen wird, aber ich werde etwas anbieten, was wir bei meiner Organisation gemacht haben. Ich werde der Erste sein, der zugibt, dass es ein bisschen wie ein Klotz ist, aber es hat gut für uns funktioniert.

Wir haben Prozesse, die über SQLCMD aufgerufen werden und sie verwenden Raiserror, um Fortschrittseinträge anzuzeigen. Offensichtlich funktionierte das nicht mehr, als wir vor langer Zeit auf Sql 2012 umgestellt haben.

Ich habe ein neues Verzeichnis auf meinem C-Laufwerk namens C: \ Sql2008_SQLCMD erstellt und ich kopierte die folgenden zwei Dateien von einer SQL 2008-Installation von Sql Server Binn-Ordner in diesen Ordner.

  • sqlcmd.exe
  • SQLCMD.rll

I modifiziert dann meine Prozesse (in Fledermaus-Dateien) eine dos Variable wie diese

SET SQLCMD="C:\Sql2008_SQLCMD\sqlcmd" 

zu verwenden, ich ersetzt dann jeden normalen SQLCMD-Befehlszeile in meiner Fledermausdatei mit

% SQLCMD% -S blah ...

anstelle des normalen

SQLCMD -S blah

Diese Technik erlaubt mir die SQL 2008-Version von SQLCMD mit einem Minimum an Änderungen an meiner bat-Dateien Skripte aufzurufen.

Dadurch konnte ich weiterhin die Ausgabe von Raiserror sehen, so dass ich den Fortschritt meiner Prozesse sehen konnte.

Ich bin derzeit immer noch mit dieser Technik unter Sql 2016 CU3 - Ich bin nicht sicher, ob ich irgendwelche Probleme haben, wenn wir schließlich zu Sql 2017 gehen oder beyound