2012-05-02 32 views

Respuesta

22

Es necesario configurar el errorlevel de sqlcmd, que por defecto es 0. Nota: No confunda el nivel de error aquí con el código de salida de sqlcmd que se devuelve a, por ejemplo, como el cmd.exeERRORLEVEL.

para deshabilitar este mensaje para todos una sesión sqlcmd, utilice la opción -m de comandos:

sqlcmd -m 1 <other options> 

para deshabilitar este mensaje para un bloque de código, utilice el comando :setvar lote:

USE [mydb] 
GO 

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

-- Reenable 
:setvar SQLCMDERRORLEVEL 0 

... 

Para usar :setvar (u otros comandos de lote SQLCMD) en Management Studio, debe habilitar el modo SQLCMD para la ventana de consulta en la que se encuentra (menú "Modo Consulta/SQLCMD"). Verá que está habilitado, cuando las líneas que comienzan con ':' tienen un fondo gris.

+0

Excelente, funcionó una delicia. Gracias por la ayuda – SteveC

+0

Hola, recibí este mensaje cuando ejecuté una aplicación creada usando Delphi. Necesito modificar las bases de datos en el medio. Tu camino está funcionando en SQL Management Studio pero cuando intenté pasar el cmd del código, recibí el error como "Sintaxis incorrecta cerca de'@P1 '. ¿Alguien tiene una solución para esto? – kvsbhavani

+1

@ kvsbhavani Eso es lo esperado. La sintaxis ': setvar' es parte del llamado" modo por lotes ", que solo es soportado por SQLCMD.EXE y SSMS (mira el último párrafo de mi respuesta). Si estás manejando esto en tu propio código Sugiero que publique una nueva pregunta en SO. –

5

Otra idea es utilizar nombres de tres partes en su SQL, p. Ej. en lugar de ...

USE Pubs; SELECT name FROM dbo.Authors;

... escribir ...

SELECT name FROM Pubs.dbo.Authors;

+0

Gracias por el puntero ... no estoy seguro de que me apetezca desambiguar todo mi código :-) – SteveC

+0

Lo intenté - no funcionó aquí. – Algoman

+0

posiblemente no funcionó porque todavía tenía la llamada mssql_select_db después de conectarme (que afaik también emite un comando USE) ...No sé, resolví el problema agregando un SELECT 1 después de cada uso (como se sugirió user2335044) – Algoman

1

En mi caso, una solución fácil y sencilla consistía en ejecutar una consulta primero a pequeña escala, tales como SELECT 1; . Por lo tanto, el mensaje Changed database context... se acopló a esta primera consulta y las siguientes consultas se obtuvieron sin este mensaje de error.

5

Lanzo actualizaciones haciendo que SQLCMD ejecute todos mis scripts .sql en un directorio. Pero cuando comienzas todo con USE myDB, obtienes un mensaje de contexto repetitivo cambiado en el archivo de registro, que es aburrido. Así que uso este delineador en su lugar. Si el contexto realmente se cambia, todavía recibes el mensaje, lo cual es bueno.

SI EXISTE (SELECCIONAR DB_NAME() DONDE DB_NAME() no en ('myDB')) USO MyDB

+0

Esta es una gran idea ya que significa que puedo ejecutar el script en la ventana de consulta (sin tener que activar el modo SQLCMD) y usarlo con SQLCMD sin que oscurezca los mensajes de error debido a la repetida salida de cambio de contexto. – LawrenceF

Cuestiones relacionadas