23

Changed database context to ...当 SQL 中包含 a 时,是否有某种方法可以停止该消息USE database

4

5 回答 5

37

您需要设置 的错误级别sqlcmd默认为 0。注意:不要将此处的错误级别与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在 Management Studio 中使用(或其他 SQLCMD 批处理命令),您需要为您所在的查询窗口启用 SQLCMD 模式(菜单“查询/SQLCMD 模式”)。当以 ':' 开头的行具有灰色背景时,您会看到它已启用。

于 2012-05-02T11:26:23.990 回答
7

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

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

于 2016-05-20T14:29:29.810 回答
6

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

USE Pubs; SELECT name FROM dbo.Authors;

...写...

SELECT name FROM Pubs.dbo.Authors;

于 2012-05-02T11:40:34.740 回答
2

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

于 2013-05-15T07:42:57.937 回答
0

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

于 2021-04-01T18:26:27.387 回答