我无法在SSMS中使用SQLCMD更改服务器连接

时间:2019-10-29 18:23:24

标签: sql sql-server tsql sql-server-2016 sqlcmd

我想轻松快速地更改脚本中的服务器连接(很多次)

然后启用SQLCMD模式并添加以下内容:

:CONNECT MYSERVER -U myUser -P myPassword
USE [NewDatabase]
GO

但是当我执行此查询时,我得到以下输出:

  

以MYUSER身份连接到MYSERVER ...

     

以MYUSER的身份断开与MYSERVER的连接...

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

许多可能的答案基于其余查询的外观。我怀疑这是对GO批处理分隔符的滥用。如果缺少GO,并且您在脚本中连接到其他服务器,则所有查询都将转到脚本中提到的最终连接。

在这种情况下,您对GO的使用,特别是如果脚本中还有其他CONNECT命令时,可能会导致脚本部分针对另一个连接运行。请注意,我无法确定批处理中的GO是否实际上会断开脚本的连接,因此我进行了测试。不,GO不会简单地断开脚本与连接的连接。但是,如果在下一个GO之前还有另一个CONNECT语句,则在下一个GO之前执行的最后一个CONNECT中执行命令,或者在脚本的结尾(以先到者为准)执行之间的命令。

这很好:

:CONNECT Server1
USE MyDB

SELECT DB_Name()    -- Returned MyDB
GO
:CONNECT YourServer
Use DB13

SELECT DB_Name()    -- Returned DB13
GO

但是,这没有:

:CONNECT Server1
USE MyDB

SELECT DB_Name()    -- Returned DB13
-- No GO statement here
:CONNECT YourServer
Use DB13

SELECT DB_Name()    -- Returned DB13
GO

由于在USE语句之后实际上并不需要GO,因此请将其删除。而是在每个CONNECT语句之前放置一个GO。

哦,以防万一-如果查询中的所有内容都是上述示例中的内容,则您只会收到看到的消息。查询结束后,您将与CONNECT语句中指定的服务器断开连接。