Как остановить сообщение "Измененный контекст базы данных..."

Есть ли способ остановить сообщение Changed database context to ..., когда кусок SQL имеет USE database в нем?

Ответ 1

Вам нужно установить уровень ошибок sqlcmd, который по умолчанию равен 0. Примечание: не путайте уровень ошибок здесь с кодом выхода sqlcmd который возвращается, например, cmd.exe как ERRORLEVEL.

Чтобы отключить это сообщение для всего сеанса sqlcmd, используйте параметр командной строки -m:

sqlcmd -m 1 <other options>

Чтобы отключить это сообщение для блока кода, используйте команду :setvar batch:

USE [mydb]
GO

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

-- Reenable
:setvar SQLCMDERRORLEVEL 0

...

Чтобы использовать :setvar (или другие командные команды SQLCMD) в Management Studio, вам необходимо включить режим SQLCMD для окна запроса, в котором вы находитесь (меню "Режим Query/SQLCMD" ). Вы увидите, что он включен, когда строки, начинающиеся с ':', имеют серый фон.

Ответ 2

Другая идея - использовать имена трех частей в вашем SQL, например. вместо...

USE Pubs; SELECT name FROM dbo.Authors;

... пиши...

SELECT name FROM Pubs.dbo.Authors;

Ответ 3

Я выпускаю обновления, запустив SQLCMD все мои сценарии .sql в каталоге. Но когда вы запускаете все с помощью USE myDB, вы получаете повторяющееся измененное контекстное сообщение в файле журнала, что является скучным. Поэтому я использую этот один вкладыш. Если контекст действительно изменен, вы все равно получаете сообщение, что хорошо.

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

Ответ 4

В моем случае простым и простым решением было сначала выполнить небольшой запрос, например SELECT 1;. Поэтому сообщение Changed database context... было связано с этим первым запросом, и следующие запросы были получены без этого сообщения об ошибке.