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



我有一个要求。使用 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 数据库中读取的。

最新更新