我需要在具有不同数据库名称但相同表和数据的 2 个不同服务器中执行脚本。为此,我尝试使用以下语句。
if (@@servername= 'srvrA')
begin
use dbA
end
else
begin
use dbB
end
但是对于 srvrB,它说数据库 dbA 不存在。
有人可以帮我实现这一目标吗?
我需要在具有不同数据库名称但相同表和数据的 2 个不同服务器中执行脚本。为此,我尝试使用以下语句。
if (@@servername= 'srvrA')
begin
use dbA
end
else
begin
use dbB
end
但是对于 srvrB,它说数据库 dbA 不存在。
有人可以帮我实现这一目标吗?
另一种选择
添加链接服务器sp_addlinkedserver
登录本地实例和远程服务器sp_addlinkedsrvlogin之间的映射
就像是:
sp_addlinkedserver
@server= N'srvrA',
@srvproduct= N'',
@provider= N'SQLNCLI',
@datasrc= N'srvrA';
sp_addlinkedsrvlogin
@rmtsrvname = 'srvrA' ,
@useself = 'FALSE' ,
@locallogin = 'your_local_login' ,
@rmtuser = 'your_remote_login' ,
@rmtpassword = 'your_password'
然后你的脚本看起来像
DECLARE @@srvname nvarchar(10) = 'srvrA'
IF (@@servername = @@srvname)
BEGIN
SELECT *
FROM srvrA.dbA.your_schema.your_table
END
ELSE
BEGIN
SELECT *
FROM srvrB.dbB.your_schema.your_table
END
如果启用 SQLCMD 模式,则可以实现目标。从 sql management studio 的 Query 菜单切换 SQLCMD 模式。然后以下脚本将起作用。
if (@@servername = 'srvrA')
begin
:setvar dbname dbA
use $(dbname)
end
else
begin
:setvar dbname dbB
use $(dbname)
end