How to stop the “Changed database context to …” me

2020-06-07 07:53发布

Is there some way to stop the Changed database context to ... message when the piece of SQL has a USE database in it ?

4条回答
Root(大扎)
2楼-- · 2020-06-07 08:10

You need to set the errorlevel of sqlcmd, which defaults to 0. Note: don't confuse the errorlevel here with the exit code of sqlcmd that is returned to, say, cmd.exe as the ERRORLEVEL.

To disable this message for all of an sqlcmd session, use the -m commandline option:

sqlcmd -m 1 <other options>

To disable this message for a block of code, use the :setvar batch command:

USE [mydb]
GO

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

-- Reenable
:setvar SQLCMDERRORLEVEL 0

...

To use the :setvar (or other SQLCMD batch commands) in Management Studio, you need to enable the SQLCMD mode for the query window you're in (menu "Query / SQLCMD Mode"). You'll see that it is enabled, when lines starting with ':' have a gray background.

查看更多
再贱就再见
3楼-- · 2020-06-07 08:10

In my case, an easy and simple solution was to run a small query first, such as SELECT 1;. The message Changed database context... was therefore coupled to this first query and the following queries were retrieved without this error message.

查看更多
【Aperson】
4楼-- · 2020-06-07 08:21

I release updates by having SQLCMD run all my .sql scripts in a directory. But when you start everything with a USE myDB you get a repetitive changed context message in the log file, which is dull. So I use this one liner instead. If the context is actually changed, you still get the message, which is good.

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

查看更多
家丑人穷心不美
5楼-- · 2020-06-07 08:22

Another idea is to use three-parts names in your SQL, e.g. instead of...

USE Pubs; SELECT name FROM dbo.Authors;

...write...

SELECT name FROM Pubs.dbo.Authors;

查看更多
登录 后发表回答