【发布时间】:2017-04-25 03:02:29
【问题描述】:
注 1:从我目前的研究中看到,没有办法完成我想做的事情,但我希望我错了......
注意 2:这样做的目的是消除更改查询到不同数据库之间的连接的需要
我正在编写一个 SQL 脚本(在 SSMS 中)以根据 ID 号查找信息。此查询可以针对 2 个数据库运行(一个测试数据库和一个生产数据库)。 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*/
理论上,上面的代码将确保我连接到正确的数据库(假设 ID 完全存在)。但不断发生的是第二个 :CONNECT 语句无论 IF EXISTS 为何都会激活,从而导致查询始终针对生产运行。
有没有办法实现这个目标?提前谢谢!
【问题讨论】:
-
这不起作用,因为
IF NOT EXISTS是 T-SQL 语句,而:CONNECT是 SQLCMD 语句。这些是不相关的:SQLCMD 由 SSMS 解析器执行,而 T-SQL 由数据库执行。由于 SQLCMD 没有条件逻辑,因此您无法在 SQLCMD 脚本中执行您想要执行的操作。如果数据库位于同一实例上,请使用USE(T-SQL 命令)而不是:CONNECT。如果它们位于不同的实例上,则无法从 SSMS 执行此操作。您必须使用适当的参数在外部调用sqlcmd。
标签: sql sql-server ssms sqlcmd