it-swarm.com.de

So beenden Sie die Nachricht "Geänderter Datenbankkontext in ..."

Gibt es eine Möglichkeit, die Changed database context to ...-Nachricht zu stoppen, wenn der SQL-Code einen USE database enthält?

15
SteveC

Sie müssen den errorlevel von sqlcmd einstellen, der standardmäßig auf 0 gesetzt ist. Hinweis: Verwechseln Sie den Errorlevel hier nicht mit dem Exit-Code von sqlcmd, der an cmd.exe als ERRORLEVEL zurückgegeben wird.

Um diese Nachricht für eine sqlcmd-Sitzung zu deaktivieren, verwenden Sie die -m-Befehlszeilenoption:

sqlcmd -m 1 <other options>

Verwenden Sie den Befehl :setvar batch, um diese Nachricht für einen Codeblock zu deaktivieren:

USE [mydb]
GO

-- Disable message for next USE command
:setvar SQLCMDERRORLEVEL 1
USE [mydb]
GO

-- Reenable
:setvar SQLCMDERRORLEVEL 0

...

Um :setvar (oder andere SQLCMD-Stapelbefehle) in Management Studio verwenden zu können, müssen Sie den SQLCMD-Modus für das Abfragefenster aktivieren, in dem Sie sich befinden (Menü "Abfrage/SQLCMD-Modus"). Sie werden sehen, dass es aktiviert ist, wenn Zeilen, die mit ':' beginnen, einen grauen Hintergrund haben.

26
Christian.K

Ich veröffentliche Updates, indem SQLCMD alle meine SQL-Scripts in einem Verzeichnis ausführt. Wenn Sie jedoch alles mit einer USE myDB starten, erhalten Sie eine sich wiederholende Kontextnachricht in der Protokolldatei, die langweilig ist. Also benutze ich stattdessen diesen einen Liner. Wenn der Kontext tatsächlich geändert wird, erhalten Sie immer noch die Nachricht, was gut ist. 

IF EXISTS (SELECT DB_NAME () WHERE DB_NAME () nicht IN ('myDB')) USE MyDB

6
Jolly Tom

Eine andere Idee ist, dreiteilige Namen in Ihrer SQL zu verwenden, z. anstatt...

USE Pubs; SELECT name FROM dbo.Authors;

...schreiben...

SELECT name FROM Pubs.dbo.Authors;

6
Aaron Bertrand

In meinem Fall war es eine einfache und einfache Lösung, zuerst eine kleine Abfrage auszuführen, z. B. SELECT 1;. Die Nachricht Changed database context... wurde daher an diese erste Abfrage gekoppelt und die folgenden Abfragen wurden ohne diese Fehlermeldung abgerufen.

2
user2335044