C'è un modo per interrompere il messaggio Changed database context to ...
quando il pezzo di SQL ha un USE database
in esso?Come interrompere il messaggio "Contesto database modificato su ..."
risposta
È necessario impostare la errorlevel di sqlcmd
, che per impostazione predefinita 0. Nota: Non confondere l'errorlevel qui con il codice di uscita di sqlcmd
che viene restituito, per esempio, come il cmd.exe
ERRORLEVEL
.
Per disattivare questo messaggio per tutti una sessione sqlcmd
, utilizzare l'opzione -m
riga di comando:
sqlcmd -m 1 <other options>
Per disattivare questo messaggio per un blocco di codice, utilizzare il comando :setvar
lotto:
USE [mydb]
GO
-- Disable message for next USE command
:setvar SQLCMDERRORLEVEL 1
USE [mydb]
GO
-- Reenable
:setvar SQLCMDERRORLEVEL 0
...
Per utilizzare :setvar
(o altri comandi batch SQLCMD) in Management Studio, è necessario abilitare la modalità SQLCMD per la finestra di query in cui ci si trova (menu "Query/Modalità SQLCMD"). Vedrai che è abilitato, quando le righe che iniziano con ':' hanno uno sfondo grigio.
Eccellente, ha funzionato a meraviglia. Grazie per l'aiuto – SteveC
Ciao, ho ricevuto questo messaggio quando eseguo un'applicazione creata usando delphi. Ho bisogno di modificare i database in mezzo.Il tuo modo di lavorare in SQL management studio ma quando ho provato a passare il cmd dal codice ho ottenuto l'errore come "sintassi errata vicino a'@P1'.Qualcuno ha una soluzione per questo? – kvsbhavani
@ kvsbhavani È previsto: la sintassi ': setvar' fa parte della cosiddetta" modalità batch ", che è supportata solo da SQLCMD.EXE e SSMS (vedere l'ultimo paragrafo della mia risposta). Se si sta gestendo questo nel proprio vi consiglio di postare una nuova domanda su SO. –
Un'altra idea è utilizzare nomi di tre parti nel codice SQL, ad es. invece di ...
USE Pubs; SELECT name FROM dbo.Authors;
... scrivere ...
SELECT name FROM Pubs.dbo.Authors;
Grazie per il puntatore ... non sono sicuro di voler disambiguare tutto il mio codice :-) – SteveC
Ho provato che non funzionava qui. – Algoman
forse non ha funzionato perché avevo ancora la chiamata mssql_select_db dopo la connessione (che afaik emette anche un comando USE) ...Non so - ho risolto il problema aggiungendo una SELECT 1 dopo ogni USE (come suggerito dall'utente2335044) – Algoman
Nel mio caso, una soluzione facile e semplice è stato quello di eseguire una piccola ricerca prima, come ad esempio SELECT 1;
. Il messaggio Changed database context...
è stato quindi accoppiato a questa prima query e le seguenti query sono state recuperate senza questo messaggio di errore.
Rilascio gli aggiornamenti facendo eseguire a SQLCMD tutti gli script .sql in una directory. Ma quando si avvia tutto con un myDB USE si ottiene un messaggio di contesto modificato ripetitivo nel file di log, che è noioso. Quindi uso questa fodera invece. Se il contesto è effettivamente cambiato, si ottiene comunque il messaggio, che è buono.
IF EXISTS (SELECT DB_NAME() dove nome_db() non IN ('myDB')) USO MyDB
Questa è una grande idea in quanto significa che posso eseguire lo script nella finestra della query (senza dover attivare la modalità SQLCMD) e usarlo con SQLCMD senza oscurare i messaggi di errore a causa del ripetuto output di modifica del contesto. – LawrenceF
Dove prendi questi messaggi? Non ne ho mai visto uno prima. –
@ ta.speot.è possibile vederli, ad esempio, quando si utilizza 'SQLCMD.exe'? –