[英]Using dynamic Server and Database Name in SQL Server stored procedure over linked servers
I have a requirement. 我有一个要求。 Using SSIS i am import data from flat file/excel file into my staging table. 我使用SSIS将数据从平面文件/ excel文件导入到我的登台表中。 From staging table i need to filter data and transfer it to different databases over different linked server.ie let say for California i have dbCalifornia on Server A, For Taxes i have dbTaxes on Server B etc etc. I need to read config table and redirect data accordingly.ie if column value =CALI insert data in dbCalifornia.tblA, for column value =TAX insert data in dbTaxes.tblA. 从暂存表中,我需要过滤数据并通过不同的链接服务器将其传输到不同的数据库。例如,对于加利福尼亚,我在服务器A上具有dbCalifornia,对于税收,我在服务器B上具有dbTaxes等。我需要读取配置表并重定向相应地数据。即,如果列值= CALI,则在dbCalifornia.tblA中插入数据,对于列值= TAX,则将数据插入dbTaxes.tblA中。 I am trying to use Server Name and Database name as variable (because i am reading these from config table) ie 我正在尝试使用服务器名称和数据库名称作为变量(因为我正在从配置表中读取它们),即
INSERT INTO [@server].[@database].[DBO].[BASIC]
But i am getting error . 但是我出错了。 I am not expert DBA please suggest my solution how can i implement this scenario. 我不是DBA专家,请提出我的解决方案,该如何实现此方案。
TIA TIA
You can do it using dynamic sql like this: 您可以使用动态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);
I don't understand what are your 100 variables tht you use in your insert, didn't you say 我不明白您在插入内容中使用的100个变量是什么,不是说
if column value =CALI insert data in dbCalifornia.tblA, for column value =TAX insert data in dbTaxes.tblA. 如果列值= CALI,则将数据插入dbCalifornia.tblA,如果列值= TAX,则将数据插入dbTaxes.tblA。 ? ?
So you just need to filter your table using @database value and insert those rows in corresponding table 因此,您只需要使用@database值过滤表并将这些行插入相应的表中
normally when reading a table from another server and DB. 通常是从另一个服务器和数据库读取表时。 I use the LinkedServer, user and table like this: 我这样使用LinkedServer,用户和表:
Select * from Link..User.Table ; 从Link..User.Table中选择*;
after a linked server I have to use 2 dots. 链接服务器后,我必须使用2个点。
I don't know if this can help since this is to read from an Oracle database. 我不知道这是否有帮助,因为这是从Oracle数据库读取的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.