2012-05-02 4 views

risposta

22

È 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.exeERRORLEVEL.

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.

+0

Eccellente, ha funzionato a meraviglia. Grazie per l'aiuto – SteveC

+0

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

+1

@ 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. –

5

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;

+0

Grazie per il puntatore ... non sono sicuro di voler disambiguare tutto il mio codice :-) – SteveC

+0

Ho provato che non funzionava qui. – Algoman

+0

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

1

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.

5

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

+0

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