有条件地触发:CONNECT语句SQL

问题描述:

注1:从我迄今为止在我的研究中看到的,没有办法完成我期望做的事情,但我希望我错了......有条件地触发:CONNECT语句SQL

注2:这样做的目的是为了消除需要改变到不同的数据库

我写一个SQL脚本(SSMS中)查询之间的连接来查找基于ID号的信息。这个查询可以运行2个数据库(测试数据库和生产数据库)。一个ID号码将在测试数据库或生产中,但不是两者。我想要做的是在SQLCMD模式下(或另一种方法,但我还没有找到)使用CONNECT语句连接到适当的DB。像这样:

: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 EXISTS如何,第二个:CONNECT语句都会激活,导致查询总是针对生产而运行。

有没有办法达到这个目标?先谢谢你!

+1

这不起作用,因为'IF NOT EXISTS'是一个T-SQL语句,而':CONNECT'是一个SQLCMD语句。这些不相关:SQLCMD由SSMS解析器执行,而T-SQL由数据库执行。由于SQLCMD没有条件逻辑,因此您无法在SQLCMD脚本中执行您想要执行的操作。如果数据库在同一个实例上,则使用'USE'(一个T-SQL命令)而不是':CONNECT'。如果他们在不同的实例,你不能从SSMS做到这一点。你必须用适当的参数在外部调用'sqlcmd'。 –

由于我不知道你需要什么来消除连接改变,你有没有考虑加入两个表,并从那里进行到所需的结果?如果这是所需的流程,你可以在返回的表格中检查id的存在。您也可以检查this。 让我知道它是否有帮助!