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

在链接服务器上的SQL Server存储过程中使用动态服务器和数据库名称,sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,我有一个要求。 我正在使用SSIS将数据从平面文件/excel文件导入我的暂存表。从暂存表中,我需要筛选数据并通过不同的链接服务器将其传输到不同的数据库。比如说,对于加利福尼亚州,我在服务器A上有dbCalifornia,对于税收,我在服务器B上有dbTaxes,等等。 我需要读取配置表并相应地重定向数据。如果列值=CALI在dbCalifornia.tblA中插入数据,则列值=TAX在dbTaxes.tblA中插入数据。我试图使用服务器名和数据库名作为变量,因为我是从配置表(即 INSERT

我有一个要求。 我正在使用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个变量是什么, 你没说吗

如果column value=CALI,则在dbCalifornia.tblA中为列插入数据 value=在dbTaxes.tblA中插入税务数据。 ?


因此,当从另一台服务器和数据库读取表时,您只需使用@database value筛选表,并将这些行插入相应的表中即可。我使用LinkedServer、user和table,如下所示:

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); 
选择*from Link..User.Table

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


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

您应该使用SSIS将数据直接插入@server@数据库。这就是SSIS的用途。通过SSIS链接服务器推送数据是一个坏主意。请给出我的insert语句示例,其中包含变量,如变量中存储的insert值,例如employerid等,因为我遇到了转换错误。TIA在这里发布您的代码,我不知道您的类型是什么,您在@sql中传递的所有内容都应该是字符串。我更新了答案,但我仍然不明白您的其他变量是什么,您不从表中插入行而不是变量吗?