我有一个要求。使用 SSIS,我可以将数据从平面文件/excel 文件导入到我的临时表中。从临时表中,我需要过滤数据并将其传输到不同链接服务器上的不同数据库。假设对于加利福尼亚,我在服务器 A 上有 dbCalifornia,对于税收,我在服务器 B 上有 dbTaxs等。我需要读取配置表并相应地重定向数据。如果列值 =CALI 在 dbCalifornia.tblA 中插入数据,对于列值 =TAX,则在 dbTax.tblA 中插入数据。我正在尝试使用服务器名称和数据库名称作为变量(因为我正在从配置表中读取这些),即
INSERT INTO [@server].[@database].[DBO].[BASIC]
但是我得到错误.我不是专家DBA,请建议我的解决方案如何实现此方案。
蒂亚
你可以像这样使用动态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 在 dbTax.tblA 中插入数据。 ?
因此,您只需要使用@database值过滤表并将这些行插入相应的表中
通常是从另一个服务器和数据库读取表时。我像这样使用链接服务器、用户和表:
从链接中选择 *。用户表;
在链接服务器之后,我必须使用 2 个点。
我不知道这是否有帮助,因为这是从 Oracle 数据库中读取的。