如何停止“将更改的数据库上下文转换为...”消息

时间:2012-05-02 11:19:15

标签: sql-server sql-server-2008 sql-server-2005

当SQL片段中有Changed database context to ...时,是否有某种方法可以停止USE database消息?

5 个答案:

答案 0 :(得分:28)

您需要设置sqlcmd的{​​{3}},默认为0.注意:不要将此处的错误级别与返回的sqlcmd的退出代码混淆,比如说,cmd.exeERRORLEVEL

要为所有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

...

要在Management Studio中使用:setvar(或其他SQLCMD批处理命令),您需要为您所在的查询窗口启用SQLCMD模式(菜单“Query / SQLCMD Mode”)。当以“:”开头的行具有灰色背景时,您会看到它已启用。

答案 1 :(得分:6)

另一个想法是在SQL中使用三部分名称,例如而不是......

USE Pubs; SELECT name FROM dbo.Authors;

...写...

SELECT name FROM Pubs.dbo.Authors;

答案 2 :(得分:6)

我通过让SQLCMD在目录中运行我的所有.sql脚本来发布更新。但是当您使用USE myDB启动所有内容时,您会在日志文件中获得重复更改的上下文消息,这将是无聊的。所以我用这个衬垫代替。如果实际更改了上下文,您仍然会收到消息,这很好。

IF EXISTS(SELECT DB_NAME() WHERE DB_NAME()不在IN(&#39; myDB&#39;))使用MyDB

答案 3 :(得分:2)

就我而言,一个简单而简单的解决方案是首先运行一个小查询,例如SELECT 1;。因此,消息Changed database context...与第一个查询相关联,并且在没有此错误消息的情况下检索了以下查询。

答案 4 :(得分:0)

简单的解决方案:将 -m 1 添加到您的 sqlcmd 命令行参数。