在链接服务器上的SQL Server存储过程中使用动态服务器和数据库名称

时间:2017-10-23 12:17:38

标签: sql sql-server database tsql

我有一个要求。 使用SSIS我将平面文件/ excel文件中的数据导入到我的登台表中。从临时表中我需要过滤数据并通过不同的链接服务器将其传输到不同的数据库。让我们说加利福尼亚我在服务器A上有dbCalifornia,对于Taxes我在服务器B等上有dbTaxes等。 我需要读取配置表并相应地重定向数据。如果列值= CALI在dbCalifornia.tblA中插入数据,则列值= TAX在dbTaxes.tblA中插入数据。我试图使用服务器名称和数据库名称作为变量(因为我从配置表中读取这些),即

INSERT INTO [@server].[@database].[DBO].[BASIC]

但我收到了错误。 我不是专家DBA请建议我的解决方案如何实现这种情况。

TIA

2 个答案:

答案 0 :(得分:1)

你可以使用动态sql这样做:

declare @server varchar(100), @database varchar(100);

DECLARE @sql varchar(8000) ='INSERT INTO[' + @server +'].['+ @database + '.[DBO].[BASIC]' + 
'(EmpID,EmployeeID,ADDR1, ADDR2, ADDR3,ADDR4,TELNUM,MARRIED,LNAME,MNAME,FNAME,' + 
'SEX, EMAIL,COUNTRYCODE, CITIZEN) ' + 
'select EmpID,EmployeeID,ADDR1, ADDR2, ADDR3,ADDR4,TELNUM,MARRIED,LNAME,MNAME,FNAME,
SEX, EMAIL,COUNTRYCODE, CITIZEN from dbo.myExcelTable where state = ' + @database;

exec(@sql); 

我不明白你在插入中使用的100个变量是什么, 你不是说

  

如果列值= CALI在dbCalifornia.tblA中为列插入数据   value = TAX在dbTaxes.tblA中插入数据。   ?

所以你只需要使用@database值过滤你的表并将这些行插入相应的表

答案 1 :(得分:0)

通常从其他服务器和DB读取表时。我使用LinkedServer,用户和表格如下:

从Link..User.Table中选择*;

在链接服务器之后我必须使用2个点。

我不知道这是否有用,因为这是从Oracle数据库中读取的。