条件触发器:CONNECT语句SQL

条件触发器:CONNECT语句SQL,sql,sql-server,ssms,sqlcmd,Sql,Sql Server,Ssms,Sqlcmd,注1:从目前为止我在研究中看到的情况来看,没有办法完成我想要做的事情,但我希望我错了 注2:这样做的目的是消除更改不同数据库查询之间连接的需要 我正在编写一个SQL脚本(在SSMS中)来根据id号查找信息。此查询可以针对两个数据库(测试数据库和生产数据库)运行。id号将出现在测试数据库或产品中,但不能同时出现在两者中。我想做的是在SQLCMD模式下使用:CONNECT语句(或者一种替代方法,但我还没有找到)连接到适当的数据库。像这样: :CONNECT /*Testing database na

注1:从目前为止我在研究中看到的情况来看,没有办法完成我想要做的事情,但我希望我错了

注2:这样做的目的是消除更改不同数据库查询之间连接的需要

我正在编写一个SQL脚本(在SSMS中)来根据id号查找信息。此查询可以针对两个数据库(测试数据库和生产数据库)运行。id号将出现在测试数据库或产品中,但不能同时出现在两者中。我想做的是在SQLCMD模式下使用:CONNECT语句(或者一种替代方法,但我还没有找到)连接到适当的数据库。像这样:

:CONNECT /*Testing database name*/
IF NOT EXISTS (SELECT * FROM /*appropriate table*/ WHERE ID = @ID)
    :CONNECT /*Production database name*/

/*Continue with the rest of the query*/
理论上,上面的代码将确保我连接到正确的DB(假设ID存在)。然而,不断发生的事情是,无论IF是否存在,第二个:CONNECT语句都会激活,从而导致查询始终针对生产运行


有没有办法实现这个目标?提前谢谢你

由于我不知道需要什么来消除连接更改,您是否考虑过将这两个表连接起来,然后从那里获得所需的结果?如果返回的表是所需的流,则可以检查该id是否存在

你也可以查一下。
如果有帮助,请告诉我

这不起作用,因为
IF NOT EXISTS
是一个t-SQL语句,而
:CONNECT
是一个SQLCMD语句。这些是不相关的:SQLCMD由SSMS解析器执行,而T-SQL由数据库执行。因为SQLCMD没有条件逻辑,所以无法执行SQLCMD脚本中尝试执行的操作。如果数据库位于同一实例上,请使用
use
(T-SQL命令)而不是
:CONNECT
。如果它们位于不同的实例上,则无法从SSM执行此操作。您必须使用适当的参数从外部调用
sqlcmd