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

时间:2015-05-14 06:47:25

标签: c# sql sql-server visual-studio-2010 sql-server-2008r2-express

我有一个要求,我需要从数据库DB1中选择数据并插入数据库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)

1 个答案:

答案 0 :(得分:0)

以这种方式试试这件事:

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)