2012-05-02 3 views
11

Есть ли способ остановить сообщение Changed database context to ..., когда кусок SQL содержит USE database?Как остановить сообщение «Измененный контекст базы данных ...»

+1

Где вы получите эти сообщения? Я никогда не видел его раньше. –

+0

@ ta.speot.is вы видите их, например, при использовании 'SQLCMD.exe'? –

ответ

22

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

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

sqlcmd -m 1 <other options> 

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

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»). Вы увидите, что он включен, когда строки, начинающиеся с ':', имеют серый фон.

+0

Отлично, обработал. Спасибо за помощь – SteveC

+0

Привет, я получил это сообщение при запуске приложения, созданного с использованием delphi. Мне нужно изменить базы данных между ними. Ваш способ работает в студии управления SQL, но когда я попытался передать cmd из кода, я получил ошибку как «Неверный синтаксис рядом с« @P1 ». У кого-нибудь есть решение для этого? – kvsbhavani

+1

@ kvsbhavani Предполагается, что синтаксис ': setvar' является частью так называемого« пакетного режима », который поддерживается только SQLCMD.EXE и SSMS (см. последний абзац моего ответа). Если вы обрабатываете это в своем собственном Код Я предлагаю вам опубликовать новый вопрос на SO. –

5

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

USE Pubs; SELECT name FROM dbo.Authors;

... написать ...

SELECT name FROM Pubs.dbo.Authors;

+0

Спасибо за указатель ... не уверен, что я хочу устранить все мои коды :-) – SteveC

+0

Я пробовал - здесь это не сработало. – Algoman

+0

возможно это не сработало потому что у меня все еще был вызов mssql_select_db после подключения (который afaik также выдает команду USE) ...Я не знаю - я решил проблему, добавив SELECT 1 после каждого USE (например, user2335044) – Algoman

1

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

5

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

IF EXISTS (SELECT DB_NAME() ГДЕ DB_NAME() не IN ('MyDB')) USE MyDB

+0

Это отличная идея, так как это означает, что я могу запустить скрипт в окне запроса (без необходимости включения режима SQLCMD) и использовать его в SQLCMD без его затенения сообщений об ошибках из-за повторного вывода изменений контекста. – LawrenceF

Смежные вопросы