Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何停止“已将数据库上下文更改为…”消息_Sql Server_Sql Server 2008_Sql Server 2005 - Fatal编程技术网

Sql server 如何停止“已将数据库上下文更改为…”消息

Sql server 如何停止“已将数据库上下文更改为…”消息,sql-server,sql-server-2008,sql-server-2005,Sql Server,Sql Server 2008,Sql Server 2005,是否有某种方法可以停止更改的数据库上下文以。。。SQL片段中包含USE数据库时的消息?您需要设置sqlcmd的默认值为0。注意:不要将此处的errorlevel与返回到cmd.exe作为errorlevel的sqlcmd的退出代码混淆 要对所有sqlcmd会话禁用此消息,请使用-m命令行选项: sqlcmd -m 1 <other options> 要在ManagementStudio中使用:setvar或其他SQLCMD批处理命令,需要为处于菜单查询/SQLCMD模式的查询窗口启

是否有某种方法可以停止更改的数据库上下文以。。。SQL片段中包含USE数据库时的消息?

您需要设置sqlcmd的默认值为0。注意:不要将此处的errorlevel与返回到cmd.exe作为errorlevel的sqlcmd的退出代码混淆

要对所有sqlcmd会话禁用此消息,请使用-m命令行选项:

sqlcmd -m 1 <other options>

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

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

使用酒吧;从dbo.Authors中选择名称

……写


从Pubs.dbo.Authors中选择名称

在我的例子中,一个简单易行的解决方案是首先运行一个小查询,如SELECT 1;。消息已更改数据库上下文。。。因此,与第一个查询耦合,在没有此错误消息的情况下检索了以下查询。

我通过让SQLCMD运行目录中的所有.sql脚本来发布更新。但是,当您使用usemydb开始所有操作时,您会在日志文件中得到一条重复更改的上下文消息,这很无聊。所以我用这一行来代替。如果实际更改了上下文,您仍然会收到消息,这很好


如果存在,请选择不在“myDB”中的DB_NAME所在位置使用myDB。简单解决方案:将-m1添加到sqlcmd命令行参数中。

从何处获取这些消息?我以前从未见过。@ta.speot。例如,当使用SQLCMD.exe时,您是否看到它们?谢谢您的指针。。。不确定我是否喜欢消除我所有代码的歧义:-可能它对我不起作用,因为我在连接后仍然有mssql_select_db调用,afaik也会发出USE命令。。。我不知道-我解决了这个问题,每次使用后都添加一个SELECT 1,比如user2335044 suggestedHi,我在运行使用delphi构建的应用程序时收到了这个消息。我需要修改中间的数据库。您的方式在SQL management studio中工作,但当我尝试从代码中传递cmd时,我在“@P1”附近得到错误,因为语法不正确。是否有人对此有解决方案?@kvsbhavani,这是预期的。:setvar语法是所谓的批处理模式的一部分,只有SQLCMD.EXE和SSMS支持该模式。请参阅我的答案的最后一段。如果您在自己的代码中处理此问题,我建议您在SO上发布一个新问题。我在14版本的SqlCmd中看到,SQLCMDRorLevel=1仅隐藏更改的数据库上下文,以。。。并且不会隐藏打印输出。但是,如果任何人使用较旧版本的SqlCmd,您可能会遇到麻烦。这是一个好主意,因为这意味着我可以在查询窗口中运行脚本,而无需打开SqlCmd模式,并将其与SqlCmd一起使用,而不会因为重复的上下文更改输出而模糊错误消息。我在执行一个以前我一直在工作。为了解决这个问题,我将php.ini中的mssql.timeout值从60增加到120。出现问题的原因是查询耗时超过60秒,DB/驱动程序?freetds为消息提供了更改的数据库上下文,而不是与超时问题相关的更有意义的错误。一旦你有了足够的声誉,你将能够投票选出你认为有用的答案。
USE [mydb]
GO

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

-- Reenable
:setvar SQLCMDERRORLEVEL 0

...