如何将绝对数据库名称、服务器名称作为参数传递?

How to pass absolute database name,server name as parameter?

我有一个要求,我需要从数据库 DB1 中 select 数据并插入到数据库 DB2 中。

update [Server1\SQLEXPRESS].[DB1].dbo.table1
set CName = (select CName 
             from [Server2\SQLEXPRESS].[DB2].dbo.table1   
             where CID = 3)

所以上面的脚本工作正常。

现在我想通过

[Server1\SQLEXPRESS].[DB1]
[Server2\SQLEXPRESS].[DB2]  

作为参数,因为服务器名称和数据库在实时环境中可能不同。

你能告诉我如何实现以下目标吗?

create procedure
    @CID numeric,
    @ServerName1 serverDataType,
    @ServerName2 serverDataType,
    @DBName1 dbDataType,
    @DbName2 dbDataType
as 
    update @ServerName1.@DBName1.dbo.table1
    set CName = (select CName 
                 from @ServerName2.@DBName2.dbo.table1   
                 where CID = @CID)

以这种方式尝试一下:

DECLARE @ServerName1 varchar(max) = 'MyServer'
DECLARE @DB1 varchar(max) = 'MyDB'

EXEC('update   ' + @ServerName1 +  '.' + DB1  + '.dbo.table1
      set CName= (select  CName from ' + @ServerName1 +  '.' + DB1  +           
                  '.dbo.table1'   where   CID ='+ @CID)