当SQL片段中有Changed database context to ...
时,是否有某种方法可以停止USE database
消息?
答案 0 :(得分:28)
您需要设置sqlcmd
的{{3}},默认为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
...
要在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
命令行参数。