【问题标题】:I can't change server connection using SQLCMD in SSMS我无法在 SSMS 中使用 SQLCMD 更改服务器连接
【发布时间】:2019-10-29 18:23:24
【问题描述】:
我想在脚本中轻松/快速更改服务器连接(多次)
然后我启用 SQLCMD 模式并添加以下内容:
:CONNECT MYSERVER -U myUser -P myPassword
USE [NewDatabase]
GO
但是当我执行这个查询时,我得到以下输出:
以 MYUSER 身份连接到 MYSERVER...
以 MYUSER 身份断开与 MYSERVER 的连接...
我做错了什么?
【问题讨论】:
标签:
sql
sql-server
tsql
sql-server-2016
sqlcmd
【解决方案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 语句中指定的服务器断开连接。