繁体   English   中英

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

[英]Using dynamic Server and Database Name in SQL Server stored procedure over linked servers

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

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

但是我出错了。 我不是DBA专家,请提出我的解决方案,该如何实现此方案。

TIA

您可以使用动态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,如果列值= TAX,则将数据插入dbTaxes.tblA。

因此,您只需要使用@database值过滤表并将这些行插入相应的表中

通常是从另一个服务器和数据库读取表时。 我这样使用LinkedServer,用户和表:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM